Не удается получить объекты массива PFQuery из блока кода синтаксического анализа

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

 PFQuery *query = [PFQuery queryWithClassName:@"comments"];
    [query whereKey:@"flirtID" equalTo:recipe.flirtID];
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        if (!error) {


            comments = [[NSMutableArray alloc]initWithArray:objects];

            // Do something with the found objects
            for (PFObject *object in objects) {

            }
        } else {
            // Log details of the failure
            NSLog(@"Error: %@ %@", error, [error userInfo]);
        }
    }];
    NSLog(@"%@",[comments objectAtIndex:0]);

person user3926564    schedule 18.08.2014    source источник
comment
Массив comments инициализируется и получает значения внутри блока завершения findObjectsInBackgroundWithBlock:. Сделайте что-нибудь с массивом comments внутри этого блока. И NSLog(@"%@",[comments objectAtIndex:0]); будет выполняться до завершения поиска объектов. Таким образом, вы получаете ноль.   -  person Akhilrajtr    schedule 18.08.2014


Ответы (1)


На самом деле работает как надо. Вы должны прочитать о том, как работают блоки.

Изменить: попробуйте прочитать документацию Apple.

Вы NSLogging «комментарии» до того, как комментарии фактически будут установлены. Как это работает? Видите ли, запрос выполняется в фоновом режиме, и на самом деле это займет некоторое время. Он работает асинхронно. Но код вне блока запустится сразу.

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

Попробуй это:

comments = [[NSMutableArray alloc]initWithArray:objects];
NSLog(@"%@",[comments objectAtIndex:0]);

Важный вопрос: что вы хотите делать после запроса? Похоже, вы хотите сохранить комментарии, но что дальше? Это определит, что вы будете делать дальше.

person Daniel Brim    schedule 18.08.2014
comment
Я понимаю ваш ответ, но я хочу получить эти данные в массив для заполнения табличного представления внизу в блоке indexPathForRow или просто для последующего использования. - person user3926564; 18.08.2014
comment
Ладно, хорошее начало. комментарии должны быть свойством. После того, как вы установили комментарии, [self.tableView reloadData]; Затем в вашем методе indexPathForRow извлеките из комментариев. - person Daniel Brim; 18.08.2014