Я предполагаю, что у каждого пользователя есть свой список автомобилей? Силой следующего метода является то, что он будет генерировать только 1 запрос API. Вам не обязательно использовать PFRelation.
Предположим, что у нас есть класс под названием «Список». Вы можете создать столбец с именем «userId» с объектом userId пользователя в качестве значения для запроса объекта списка.
PFObject* list = [PFObject [email protected]"List"];
PFUser* currentUser = [PFUser currentUser];
[list setObject:currentUser.objectId forKey:@"userId"];
Вы можете добавить один объект «Car» в качестве указателя на «Список» объект:
PFObject* car = [firstQuery getFirstObject]; // assuming the query has been created
[list addObject:car forKey:@"cars"];
[list save];
или вы можете добавить несколько «автомобиль» объектов как указатели на «Список» объект :
NSArray* cars = [secondQuery findObjects]; // assuming the query has been created
[list addObjectsFromArray:car forKey:@"cars"];
[list save];
Теперь запрос объекта следующим образом. Обязательно используйте метод includeKey:.
PFQuery* query = [PFQuery [email protected]"List"];
[query whereKey:@"userId" isEqualTo:currentUser.objectId];
[query includeKey:@"cars"]; // Make sure to include this when pulling an array of pointers
PFObject* list = [query getFirstObject];
NSArray* cars = [list objectForKey:@"cars"];
Обратите внимание, что вы можете вытащить массив объектов «автомобиль» из «списка» объекта через includeKey : метод. Следует отметить, что addObject: ForKey: будет дополнять существующий массив. Вы можете добавить новый массив указателей к любому объекту с помощью метода setObject: ForKey: с помощью метода .
Спасибо Майку Э. Это работает очень хорошо. Можете ли вы также рассказать мне, как вернуть этот запрос для метода - (PFQuery *) queryForTable в PFQueryTableViewControlle. Должен ли я делать это с двумя запросами? – user3678815
Я никогда не использовал класс PFQueryTableViewController, но я бы предположил, что он работает так же, как и стандартный IOS UITableView. После того, как вы инициируете сеанс для пользователя, вы можете кэшировать данные пользователя через: ** PFUser * currentUser = [PFUser currentUser] **. После этого вам больше не нужно запрашивать текущего пользователя. Предполагая, что вы выполняете асинхронное извлечение данных, как только вы вытащили данные, вы можете просто обновить tableView внутри блока завершения. –
Если этого ответа достаточно, вы должны принять его как принятое: -D –