В настоящее время я делаю свои первые шаги в ReactiveCocoa, и у меня есть крутая кривая обучения, чтобы понять принципы.
Во всяком случае, вот что я уже придумал.
Я привязываю свойство NSArray к RACSignal, чтобы иметь возможность реагировать на входящие данные JSON по сети.
- (void)updateRandomUserData
{
@weakify(self);
RAC(self, users) = [[self fetchRandomUserData] doNext:^(NSDictionary *json){
@strongify(self);
NSMutableArray *randomUsers = [NSMutableArray array];
for (NSDictionary *dict in json[@"data"]) {
BKRandomUser *randomUser = [MTLJSONAdapter modelOfClass:[BKRandomUser class] fromJSONDictionary:dict error:nil];
[randomUsers addObject:randomUser];
}
self.users = randomUsers;
}];
}
Создание сигнала выглядит так:
- (RACSignal *)fetchRandomUserData
{
return [[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
[subscriber sendNext:JSON];
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON, NSError *error) {
[subscriber sendError:error];
}];
[operation start];
return [RACDisposable disposableWithBlock:^{
[operation cancel];
}];
}] doError:^(NSError *error) {
NSLog(@"error: %@", [error description]);
}];
}
Теперь, когда веб-служба не предоставляет никаких данных, я хочу отреагировать на это. Прямо сейчас приложение вылетает со следующим утверждением, которое я, честно говоря, не понимаю:
* Завершение работы приложения из-за необработанного исключения "NSInternalInconsistencyException", причина: "Получена ошибка от имени: [[+createSignal:] -doError:] -doNext: в привязке для ключевого пути "users" на : ( нулевой)'
Что мне здесь не хватает?
Спасибо!