Intereting Posts
Не понимаю, почему мои данные NSString равны нулю Firebase Cloud Messaging Уведомления для iOS, не показывающие открытые и аналитические Постоянное подключение HTTPS Objective-C iOS Cocoa iOS Safari – прокрутка iFrame вызывает div внизу для прокрутки Добавление задержки в цикл for в быстром Показать учебники / советы о том, как использовать приложение IOS. Потоковое интернет-радио Почему мой запрос Vapor всегда терпит неудачу? iOS – iBeacon – реклама (трансляция) в качестве маяка в фоновом режиме после обновления iOS 7.1 Как обмануть UIScrollView в начале прокрутки в середине панорамирования? Как конвертировать MIME-тип в предпочтительное расширение имени файла на iOS? Xcode не удалось найти сертификаты распространения iOS Панель поиска iOS 11 в таблицеViewHeader переходит в верхнюю часть экрана в фокусе Переопределение UIButton с использованием Xamarin Создание библиотеки Swift OSS, совместимой с Objective-C

Доступ к 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.