CoreData: как извлечь определенный объект с помощью предиката - PullRequest
19 голосов
/ 21 февраля 2010

Ситуация:

Я получаю полную таблицу из своей базы данных sqllite core и показываю ее в виде таблицы следующим образом:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyTable"
                                          inManagedObjectContext:managedObjectContext];

Задача:

Как мне получить EntryID и получить конкретную запись из базы данных (например, если я нажму на запись)? Я думаю, что это идет в правильном направлении?

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"(id = %@)", myEntryID];

Ответы [ 4 ]

49 голосов
/ 21 февраля 2010

Если у вас есть объект записи с именем entry, это будет предикат, подобный этому:

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"(SELF = %@)", entry];

Что примерно эквивалентно

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"(objectID = %@)", entry.objectID];

Для NSManagedObjectID вы получите что-то вроде:

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"(objectID = %@)", myEntryID];
8 голосов
/ 09 февраля 2014

Это правильный предикат:

[NSPredicate predicateWithFormat:@"SELF = %@", objectID];

Где objectID - это NSManagedObjectID экземпляр.

3 голосов
/ 21 февраля 2010

Возможно, вы захотите взглянуть на -[NSManagedObject objectID] и -[NSManagedObjectContext objectWithID:].

2 голосов
/ 21 февраля 2010

Когда вы строите таблицу, вы делаете это либо с массивом, возвращаемым извлечением, либо с помощью неявного массива внутри NSFetchResultsController. Следовательно, требуемый объект имеет тот же индекс в массиве / контроллере, что и в таблице.

Итак, это просто вопрос вызова:

myObject=[fetchedArray objectAtIndex:tableRowIndex];

или

myObject=[myFetchedResultsController objectAtIndexPath:tableRowIndex];

Это настоящий гений UITable. Он всегда точно отражает модель данных. Вам никогда не придется переводить взад и вперед между индексами таблиц и индексами модели данных.

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