Ситуация:
Я выбираю заполненную таблицу от своей sqllite базовой базы данных данных и показываю его в TableView как это:
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyTable"
inManagedObjectContext:managedObjectContext];
Проблема:
Как я получаю EntryID и выбираю определенную запись от базы данных (например, если я нажимаю на запись)? Я думаю, что это идет в правильном направлении?
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"(id = %@)", myEntryID];
Если у вас есть объект записи с именем entry
, это будет такой предикат:
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"(SELF = %@)", entry];
Что примерно эквивалентно
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"(objectID = %@)", entry.objectID];
Для NSManagedObjectID
вы получите что-то вроде:
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"(objectID = %@)", myEntryID];
Вы можете посмотреть - [NSManagedObject objectID]
и - [NSManagedObjectContext objectWithID:]
.
Когда вы строите таблицу, вы делаете это либо с помощью массива, возвращаемого выборкой, либо неявным массивом внутри NSFetchResultsController
. Следовательно, желаемый объект имеет тот же индекс в массиве / контроллере, что и в таблице.
Таким образом, это просто вопрос вызова:
myObject=[fetchedArray objectAtIndex:tableRowIndex];
или
myObject=[myFetchedResultsController objectAtIndexPath:tableRowIndex];
Это настоящий гений UITable. Он всегда точно отражает модель данных. Вам никогда не придется переводить туда-сюда индексы таблиц и индексы вашей модели данных.