我正在尝试使用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 (
)
为什么会这样?
当然我做了初始化数组:
self.dataArray = [NSMutableArray new];
甚至提供getter方法:
-(NSMutableArray*)dataArray{
if(!_dataArray){
_dataArray = [[NSMutableArray alloc] init];
}
return _dataArray;
}
答案 0 :(得分:1)
看起来你似乎没有将self.dataArray
设置为等于subscribeNext块中x
的结果。
尝试:
在subscribeNext中的日志语句之后 self.dataArray = x;
。
此外,信号是异步的 - 在信号完成后,发送<{1}}的可能性极小。它可能会在完成信号工作之前发生。