При необходимости введите ключ указателя

У меня есть PFObject и некоторые из ключей содержат указатели. Иногда я не включаю их в исходный запрос. Как получить их для существующего объекта? Должен ли я сформировать совершенно новый PFQuery?

2 ответа

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

includeKey предназначен для использования в исходном запросе. Если объекты не включены, правильный подход заключается в использовании fetchIfNeeded: https://parse.com/docs/ios/api/Classes/PFObject.html#//api/name/fetchIfNeeded

PFObject *department = user[@"department"];
// If includeKey was not used for department in the original query, department is now only a stub pointing to the actual object.
[department fetchIfNeededInBackgroundWithBlock:^(PFObject *object, NSError *error) { NSString *departmentName = department[@"name"];
}];


Используйте includeKey: любые ключи указателей, которые вы хотите включить в запрос.

PFQuery * query = [PFQuery queryWithClassName:@"SomeParseClass"];
[query includeKey:@"SomePointerKey"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { if (!error) { PFObject * firstOb = objects[0]; PFObject * pointerObject = firstOb[@"SomePointerKey"]; }
}];

Если у вас уже есть объект, вы можете получить объект-указатель. Если у него нет ссылки на объект, вам придется выполнять выборку:

if (ob[@"SomePointerKey"]) { // ob already has pointer to object PFObject * pointerOb = ob[@"SomePointerKey"]; [pointerOb fetchInBackgroundWithBlock:^(PFObject *object, NSError *error) { if (!error) { // pointerOb ready here! } }];
}
else { // ob is missing pointer data, fetch it! [ob fetchInBackgroundWithBlock:^(PFObject *object, NSError *error) { PFObject * pointerOb = object[@"SomePointerKey"]; [pointerOb fetchInBackgroundWithBlock:^(PFObject *object, NSError *error) { if (!error) { // pointerOb ready here! } }]; }];
}

licensed under cc by-sa 3.0 with attribution.