Почему я не могу установить значение свойства в качестве аргумента items блока завершения readWithCompletion?

Я только начал разрабатывать приложения для платформы iOS и использую веб-службы Azure для доступа к удаленной базе данных. Я звоню readWithCompletion: метод на столе, чтобы попытаться прочитать все данные в моей базе данных с сервера.

В блоке завершения вызова метода я записал items аргумент к консоли, и мои данные удаляются успешно. Я пробовал это NSMutableArray *stops = [items mutableCopy] чтобы получить мои данные за пределами блока завершения, но stops ноль, как только он выходит за рамки блока завершения.

Что я здесь не так делаю?

[self.table readWithCompletion:^(NSArray *items, NSInteger totalCount, NSError *error) {
    self.stops = [items mutableCopy];
}];

1 ответ

Решение

Если блок работает асинхронно, что и следовало ожидать для веб-запроса, то переменные, которые изменяются в блоке, не будут изменены, пока не выполнится блок, что произойдет позже, после завершения запроса.

Вот некоторый абстрактный код и ожидаемые результаты журнала. Допустим, у вас есть табличное представление, модель которого представляет собой массив объектов, и, скажем, асинхронный запрос извлекает эти объекты из веб-службы:

@property (weak, nonatomic) IBOutlet *tableview;
@property (strong, nonatomic) NSArray *model;

[webRequest performRequest:^(NSArray *result) {
    // this code runs later, when the request completes
    self.model = result;
    // update our UI to indicate that we fetched some data
    [self.tableview reloadData];
}];

// this code runs right away, so self.model is uninitialized at this point
// this is where we should update our UI to say that we are busy fetching data
Другие вопросы по тегам