2015-02-23 1 views
0

У меня есть подкласс PFQueryTableViewController, который делает запрос к таблице Parse.com для данных с столбцом с именем messages, который имеет тип массива.Parse.com: Fetch Array Column (Отношение) Использование запроса

Запрос возвращает данные, за исключением того, что сообщения являются пустым массивом (хотя в таблице AND есть данные в поле messages).

Ниже приведен запрос, который я создаю для данных Разбора:

- (PFQuery *)queryForTable { 
    PFQuery *query = [PFQuery queryWithClassName:self.parseClassName]; 
    [query whereKey:@"user" equalTo:[PFUser currentUser]]; 
    [query includeKey:@"messages"]; 
    return query; 
} 

Weird часть после того, как я обновить объект Синтаксического и сохранить его, перезарядку данные таблиц извлекают данные в столбце массива.

Любая идея, почему он возвращает пустой массив с исходным запросом?

EDIT:

NSLog() вывод результата запроса (от - (void)objectsDidLoad:):

objects: (
    "<Conversation: 0x7f8590c6b0b0, objectId: 5rO7Y2R5hs, localId: (null)> {\n ACL = \"<PFACL: 0x7f8590e61ec0>\";\n messages =  (\n );\n user = \"<PFUser: 0x7f8590d9d260, objectId: M88Oz4annq>\";\n}" 
) 

Создание отношения После нажатия кнопки:

Message *newMessage = [[Message alloc] init]; 
//... set message properties 
[newMessage saveInBackground]; 

if (!self.parseObject.objectId) { 
    self.parseObject = [[MyParseObject alloc] init]; 
    [self.parseObject setUser:[User currentUser]]; 
} 

[[self.parseObject messages] addObject:newMessage]; 
[self.parseObject saveInBackground]; 

Класс ParseObject выше это то, что я запрашиваю.

+0

Это поможет, если вы разместите больше кода. Какой код создает отношение? Какой код сохраняет его? И как вызывается 'queryForTable', поэтому мы можем быть уверены, что сохранение закончено? – piojo

+0

@piojo, см. Обновление. Кроме того, 'queryForTable' вызывается автоматически контроллером. – kRiZ

+0

Вызывается функция запроса сразу после сохранения функции? Если это так, данные, вероятно, пока еще не сохранены. Или он частично сохраняется, когда пользовательский объект сохраняется, но не 'newMessage'. Но есть и другие вещи, о которых я могу думать, что это может пойти не так, но я просто недостаточно знаю о том, что происходит. Кроме того, если мы попадаем в сложный материал о том, какие объекты нужно создавать в каком порядке (и когда нужно сохранить объект до его использования), это шаткое основание для меня. – piojo

ответ

0

То, как вы сохраняете свое сообщение, очень подвержено времени. Поскольку вы не ждете, пока еще не будет сохранен «newMessage». Таким образом, значение ID может быть нулевым.

Убедитесь, что объект newMessage сохранен первым, поставив следующий код внутри блока завершения.

Message *newMessage = [[Message alloc] init]; 
[newMessage saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { 
    if(succeeded){ 
     if (!self.parseObject.objectId) { 
      self.parseObject = [[MyParseObject alloc] init]; 
      [self.parseObject setUser:[User currentUser]]; 
     } 

     [[self.parseObject messages] addObject:newMessage]; 
     [self.parseObject saveInBackground]; 
    } 
}]; 

Не видя определений классов Message и MyParseObject, я не могу быть более полезным.