CoreData: Как выбрать конкретный объект с помощью предиката

Ситуация:

Я выбираю заполненную таблицу от своей sqllite базовой базы данных данных и показываю его в TableView как это:

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

Проблема:

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

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"(id = %@)", myEntryID];
19
задан Maciek Czarnik 24 November 2016 в 14:12
поделиться

3 ответа

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

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

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

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

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

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"(objectID = %@)", myEntryID];
50
ответ дан 30 November 2019 в 02:09
поделиться

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

3
ответ дан 30 November 2019 в 02:09
поделиться

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

Таким образом, это просто вопрос вызова:

myObject=[fetchedArray objectAtIndex:tableRowIndex];

или

myObject=[myFetchedResultsController objectAtIndexPath:tableRowIndex];

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

2
ответ дан 30 November 2019 в 02:09
поделиться