2014-12-07 3 views
0

Итак, я пытаюсь извлечь данные с Parse.com, а затем добавить их в глобальный массив, чтобы обновить представление таблицы. Сейчас у меня есть:Потеря данных из запроса Parse позже в коде

- (void)loadData { 
    PFQuery *query = [PFQuery queryWithClassName:@"Event"]; 

    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
     for (PFObject *object in objects) { 
      EventObject *thisEvent = [[EventObject alloc] initWithPFObj:object]; 
      [self.events addObject:thisEvent]; 
     } 
     [self.tableView reloadData]; 
    }]; 
} 

Когда TableView пытается перезагрузить данные, он находит объект в self.events, но свойства объекта все равны нулю. (Я думаю, что это имеет какое-то отношение к слабому/сильному я в асинхронном блоке, но я не могу понять это.) Как мне получить данные для сохранения между этим блоком и перезагрузкой?

+0

Примечание стороны: Анализировать поддерживает NSObject подклассы для моделей, почему бы вам не использовать их? У меня такое чувство, что у вашего EventObject есть ошибка, и с полученными данными он работает неправильно. – Andy

+0

@ Andy Я поставил точку останова в блоке, чтобы проверить, правильно ли запущен объект Event, и это так. Он имеет все правильные данные при добавлении к self.events и затем отключается, когда я пытаюсь перезагрузить таблицу. – reco189

ответ

0

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

Таким образом, вы должны использовать этот weakSelf вместо просто Self, на ваш метод LoadData:

__weak typeof(self) weakSelf = self; 

Кроме того, не забудьте положить ваши NSMutableArray "события", как Strong, а не слабых.

Edit: Краткое объяснение разницы между Strong и Weak ссылок: https://stackoverflow.com/a/18344946/2788711

+0

Нет, нет, это временный цикл сохранения, который будет разорваться, как только будет обработан запрос. – Andy

Смежные вопросы