Базовые данные - получение objectID идентификаторов отношения «многие-многие» без возникновения ошибки - PullRequest
3 голосов
/ 01 октября 2011

У меня есть сущность, имеющая отношение ко многим.После того, как я выбрал подмножество объектов из моей сущности, я хотел бы получить ManagedObjectIDs объектов отношений - без возникновения ошибки.Это возможно?Насколько я понимаю из документации, вызов objectID в случае сбоя не приводит к его срабатыванию, но, когда я пытаюсь выполнить следующую строку, выдается ошибка для отношения каждого объекта:

[word.articles valueForKeyPath:@"objectID"];

Я также пыталсяследующее с тем же результатом:

[word valueForKeyPath:@"articles.objectID"];

Я также попробовал следующее, но, к сожалению, ошибки в статье все еще возникают:

for (Article *article in word.articles) {

   [articleIDs addObject:article.objectID];
}

Любая помощь будет принята с благодарностью, пожалуйста!

Ответы [ 4 ]

3 голосов
/ 12 октября 2016

Это стало возможным в iOS 8.3

/* returns an array of objectIDs for the contents of a relationship. 
   to-one relationships will return an NSArray with a single 
   NSManagedObjectID.  Optional relationships may return an empty 
   NSArray. 
   The objectIDs will be returned in an NSArray regardless of the type 
   of the relationship.  */
- (NSArray<NSManagedObjectID *> *)objectIDsForRelationshipNamed:(NSString *)key NS_AVAILABLE(10_11,8_3);

Он совершает одну поездку в магазин, чтобы получить все идентификаторы.

1 голос
/ 01 октября 2011

Что вам нужно сделать, это создать NSFetchRequest для сущности Articles, используя предикат, подобный следующему (где 'word' - управляемый объект слова):

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(ANY words == %@)", word];

Установить resultType = NSManagedObjectIDResultType, как говорит Эшли вего ответ.

Затем запрос на выборку вернет коллекцию ObjectID объектов Article для статей, содержащих указанное слово.

ИЛИ: если вы хотите искать текст по слову, а не извлекатьсначала это как управляемый объект, а затем использовать такой предикат, как этот.(где 'wordText' - строка NSSt и предполагается, что 'text' - поле сущности Word)

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(ANY words.text == %@)", wordText];
0 голосов
/ 31 января 2014

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

Просмотрите свойство relationshipKeyPathsForPrefetching в классе NSFetchRequest.Вот пример, где request возвращает массив Word объектов, которые содержат свойство articles:

[request setRelationshipKeyPathsForPrefetching:@[@"articles"]];
0 голосов
/ 01 октября 2011

Я думаю, что вам, возможно, придется использовать NSFetchRequest для Статей сущностей и установки

request.resultType = NSManagedObjectIDResultType

Если проблема заключается в множественных срабатываниях сбоев (так многократных SQL-запросов), как насчетзапрос на выборку для извлечения всех ваших необходимых статей изначально, что означает, что сделан только один запрос SQL?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...