CoreData:如何使用谓词获取特定对象

时间:2010-02-21 14:18:43

标签: objective-c iphone core-data

情况:

我从sqllite核心数据数据库中获取一个完整的表,并在TableView中显示如下:

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

挑战:

如何获取EntryID并从数据库中获取特定条目(例如,如果我点击一个条目)?我认为这是朝着正确的方向发展的?

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

4 个答案:

答案 0 :(得分:49)

如果你有一个名为entry的入口对象,它将是一个这样的谓词:

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

大致相当于

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

对于NSManagedObjectID,你会得到类似的内容:

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

答案 1 :(得分:8)

这是正确的谓词:

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

其中objectIDNSManagedObjectID个实例。

答案 2 :(得分:3)

您可能希望查看-[NSManagedObject objectID]-[NSManagedObjectContext objectWithID:]

答案 3 :(得分:2)

构建表时,可以使用fetch返回的数组,也可以使用NSFetchResultsController中的隐式数组。因此,您想要的对象在数组/控制器中具有与表中相同的索引。

所以,这只是一个问题:

myObject=[fetchedArray objectAtIndex:tableRowIndex];

myObject=[myFetchedResultsController objectAtIndexPath:tableRowIndex];

这是UITable的真正天才。它始终精确地反映数据模型。您永远不必在表索引和数据模型索引之间来回转换。