NSManagedObjectID в NSData

Если вы выполняете подзапрос для действительных brewery_ids, вы можете присоединиться к этому списку. Например:

SELECT br.name brewery_name, ibu, AVG(ibu) OVER (PARTITION BY 
       b.brewery_id ORDER BY ibu DESC)
FROM beers b
JOIN (
   SELECT brewery_id
   FROM beers
   GROUP BY brewery_id
   HAVING COUNT(DISTINCT ibu) >= 5
) X ON X.brewer_id = b.brewery_id 
JOIN breweries br ON b.brewery_id = br.brewery_id
WHERE ibu IS NOT NULL

Хорошая вещь в таком запросе - вы можете запустить подзапрос, чтобы проверить, ограничен ли он нужными идентификаторами. Затем просто добавьте его в свой запрос.

13
задан Community 23 May 2017 в 12:08
поделиться

4 ответа

Получить заархивированный URI, соответствующий a NSManagedObject objectID:

NSManagedObject* myMO;
...
NSURL *uri = [[myMO objectID] URIRepresentation];
NSData *uriData = [NSKeyedArchiver archivedDataWithRootObject:uri];

Для возвращения к экземпляру исходного управляемого объекта Вам нужен стек CoreData с персистентным хранилищем, содержащим тот экземпляр, уже добавленный к NSPersistentStoreCoordinator. Затем:

NSData *uriData;
NSPersistentStoreCoordinator *psc;
NSManagedObjectContext *moc; //with moc.persistentStoreCoordinator = psc.
...
NSURL *uri = [NSKeyedUnarchiver unarchiveObjectWithData:uriData];
NSManagedObjectID *moID = [psc managedObjectIDForURIRepresentation:uri];
NSManagedObject *myMO = [moc objectWithID:moID];
38
ответ дан 1 December 2019 в 17:36
поделиться

Вы смотрели на URIRepresentation? Легко преобразовать NSURL в NSString и это к NSData.

3
ответ дан 1 December 2019 в 17:36
поделиться

Из документации NSManagedObjectID:

Идентификаторы объектов могут быть преобразованы в представление URI, которое может быть заархивировано и воссоздано позже, чтобы вернуться к данному объекту (использующий managedObjectIDForURIRepresentation: (NSPersistentStoreCoordinator) и objectWithID: (NSManagedObjectContext). Например, последняя выбранная группа в приложении могла быть сохранена в пользовательских значениях по умолчанию через идентификатор объекта группы. Можно также использовать идентификатор объекта представления URI для хранения “слабых” отношений через персистентные хранилища (где никакое твердое соединение не возможно).

Просто превратите, это в URL затем превращает это в строку или данные.

5
ответ дан 1 December 2019 в 17:36
поделиться

Вам не нужно преобразовывать NSURL в NSString перед архивированием. Просто заархивируйте NSURL.

Изменить: я недавно узнал, что идентификатор объекта может измениться, например, после миграции. Поэтому кажется не очень хорошей идеей сохранять идентификатор на диск, ожидая, что впоследствии можно будет ссылаться на объект.

3
ответ дан 1 December 2019 в 17:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: