Я пытаюсь получить некоторые данные из удаленного файла. Я создаю массив _items внутри блока асинхронного запроса, который на самом деле заполнен данными, но при вызове _items где-либо еще в моем контроллере все еще пусто.Как использовать асинхронные данные
Я не уверен, но я предполагаю, что, поскольку данные загружаются асинхронно, при вызове _items все еще пусто. Итак, как я могу использовать массив с данными после завершения async-задачи?
- (IBAction)fetchEvent
{
_items = [[NSMutableArray alloc] initWithCapacity:5];
NSString *link = [NSString stringWithFormat:@"url...?id=%@", self.eId];
NSURL *url = [NSURL URLWithString:link];
NSURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response,
NSData *data, NSError *connectionError)
{
if (data.length > 0 && connectionError == nil)
{
NSDictionary *match = [NSJSONSerialization JSONObjectWithData:data
options:0
error:NULL];
NSArray *odds = [match objectForKey:@"odds"];
OddsItem *item;
for (NSDictionary *books in odds) {
item = [[OddsItem alloc] init];
item.oddsBook = [odds objectForKey:@"book"];
[_items addObject:item];
}
}
}];
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self fetchEvent];
}
можно было бы, чтобы ваш блок завершения опубликовать уведомление, когда загрузка данных завершена, и ваш контроллер представления реагировать на это уведомление, делая все, что вам нужно сделать с '_items'. Вы также можете передать блок 'fetchEvent', который он мог бы выполнить в конце обработчика завершения. –