Доступ к NSMutableArray изнутри для цикла

Я очень новичок в iOS и объективной разработке, поэтому я борюсь с пониманием того, как я это делаю.

Сначала мой код:

-(NSMutableArray *)messagesGetList { NSMutableArray *messageList = [[NSMutableArray alloc] init]; NSURL *url = [NSURL URLWithString:@"http://xxxx/"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { for (NSDictionary * dataDict in JSON) { [messageList addObject: dataDict]; } } failure:^(NSURLRequest *request , NSURLResponse *response , NSError *error , id JSON) { NSLog(@"Failed: %@", error); }]; [operation start]; return messageList; } 

У меня проблема, заключается в том, что я не могу получить доступ к списку сообщений NSMutableArray * внутри цикла for (NSDictionary * dataDict in JSON). Т.е. ничто не добавляется в массив при выполнении моего цикла.

Как получить доступ к массиву из моего цикла?

Заранее благодарю за вашу помощь, fischer

Поскольку +JSONRequestOperationWithRequest: принимает блоки, которые должны быть вызваны на успех и при сбое, хорошо предположить, что этот метод выполняется асинхронно. Итак, если вы сразу же проверяете массив, который сразу возвращается из вашего -messagesGetList , он, вероятно, будет пустым. Если вы подождете некоторое время перед проверкой, вы можете увидеть, как оно заполняется.

Я думаю, вам нужно добавить модификатор хранилища __block в свою переменную NSMutableArray , чтобы он мог быть изменен внутри ответного блока.

 __block NSMutableArray *messageList = [[NSMutableArray alloc] init]; 

Вы должны передать объект-делегат этому методу и отправить сообщение делегату после завершения сетевого запроса. Это лучшая практика на платформе iOS.