无法使用 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 记录极不可能在您的信号完成后 发生。它可能会在信号工作完成之前发生。