无法使用reactiveCocoa在订阅块中分配值

时间:2016-02-20 12:26:19

标签: objective-c reactive-cocoa

我正在尝试使用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;
}

1 个答案:

答案 0 :(得分:1)

看起来你似乎没有将self.dataArray设置为等于subscribeNext块中x的结果。

尝试:

在subscribeNext中的日志语句之后

self.dataArray = x;

此外,信号是异步的 - 在信号完成后,发送<{1}}的可能性极小。它可能会在完成信号工作之前发生。