无法使用 reactiveCocoa 在订阅块中分配值
cant assign value in subscribe block using reactiveCocoa
我试图在使用 Reactive Cocoa 映射数据后设置值。这是我的代码:
- (RACSignal *)getNews{
RACSignal *sign = [self.manager rac_GET:MAIN_URL_NEWS parameters:self.parameters];
return sign;
}
那我做:
@weakify(self);
[[[self getNews] map:^id(NSDictionary *response) {
// Mapping
NSArray * array = [response valueForKey:@"data"];
NSMutableArray *localArray = [NSMutableArray new];
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NewsParseer *news = [[NewsParseer alloc]init];
[news mts_setValuesForKeysWithDictionary:[[response valueForKey:@"data"]objectAtIndex:idx]];
NSLog(@"Object memory %@", news);
NSLog(@"Newnew %@", news.title);
[localArray addObject:news];
}];
return localArray;
}] subscribeNext:^(NSArray* x) {
NSLog(@"Data is %@", x);
}];
NSLog(@"data array %@", self.dataArray);
@"Data is %@" 是输出正确的值,因此,在 subscribeNext 中我们得到了正确的值。
但是,@"data array" 输出是
data array (
)
为什么会这样?
当然我确实初始化了数组:
self.dataArray = [NSMutableArray new];
连提供getter方法:
-(NSMutableArray*)dataArray{
if(!_dataArray){
_dataArray = [[NSMutableArray alloc] init];
}
return _dataArray;
}
您似乎从未在 subscribeNext 块中将 self.dataArray
设置为等于 x
的结果。
尝试:
self.dataArray = x;
在 subscribeNext 中的日志语句之后。
此外,该信号是异步的 - 您的 self.dataArray
记录极不可能在您的信号完成后 发生。它可能会在信号工作完成之前发生。
我试图在使用 Reactive Cocoa 映射数据后设置值。这是我的代码:
- (RACSignal *)getNews{
RACSignal *sign = [self.manager rac_GET:MAIN_URL_NEWS parameters:self.parameters];
return sign;
}
那我做:
@weakify(self);
[[[self getNews] map:^id(NSDictionary *response) {
// Mapping
NSArray * array = [response valueForKey:@"data"];
NSMutableArray *localArray = [NSMutableArray new];
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NewsParseer *news = [[NewsParseer alloc]init];
[news mts_setValuesForKeysWithDictionary:[[response valueForKey:@"data"]objectAtIndex:idx]];
NSLog(@"Object memory %@", news);
NSLog(@"Newnew %@", news.title);
[localArray addObject:news];
}];
return localArray;
}] subscribeNext:^(NSArray* x) {
NSLog(@"Data is %@", x);
}];
NSLog(@"data array %@", self.dataArray);
@"Data is %@" 是输出正确的值,因此,在 subscribeNext 中我们得到了正确的值。 但是,@"data array" 输出是
data array (
)
为什么会这样?
当然我确实初始化了数组:
self.dataArray = [NSMutableArray new];
连提供getter方法:
-(NSMutableArray*)dataArray{
if(!_dataArray){
_dataArray = [[NSMutableArray alloc] init];
}
return _dataArray;
}
您似乎从未在 subscribeNext 块中将 self.dataArray
设置为等于 x
的结果。
尝试:
self.dataArray = x;
在 subscribeNext 中的日志语句之后。
此外,该信号是异步的 - 您的 self.dataArray
记录极不可能在您的信号完成后 发生。它可能会在信号工作完成之前发生。