Подтвердить что ты не робот

CoreData: как получить конкретный объект с использованием предиката

Ситуация:

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

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

Задача:

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

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

Ответ 1

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

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

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

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

При a NSManagedObjectID вы получите что-то вроде:

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

Ответ 2

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

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

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

Ответ 3

Вы можете посмотреть -[NSManagedObject objectID] и -[NSManagedObjectContext objectWithID:].

Ответ 4

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

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

myObject=[fetchedArray objectAtIndex:tableRowIndex];

или

myObject=[myFetchedResultsController objectAtIndexPath:tableRowIndex];

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