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

У меня есть 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.