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

fab*_*ian 19 iphone core-data objective-c

情况:

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

NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyTable"
                                          inManagedObjectContext:managedObjectContext];
Run Code Online (Sandbox Code Playgroud)

挑战:

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

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"(id = %@)", myEntryID];
Run Code Online (Sandbox Code Playgroud)

MrM*_*age 50

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

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"(SELF = %@)", entry];
Run Code Online (Sandbox Code Playgroud)

这大致相当于

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"(objectID = %@)", entry.objectID];
Run Code Online (Sandbox Code Playgroud)

对于a NSManagedObjectID,你会得到类似的东西:

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"(objectID = %@)", myEntryID];
Run Code Online (Sandbox Code Playgroud)

  • 如果你根据objectIDs获取*multiple*对象,那么"self"关键字也可以工作:`NSPredicate*predicateForFetch = [NSPredicate predicateWithFormat:@"(self IN%@)",arrayOfNSManagedObjectIDs]; (6认同)
  • +1如果你必须使用谓词,这就是你要走的路.否则,` - [NSManagedObjectContext objectWithID:]`可能会更好. (3认同)
  • 当然,但对于例如`NSFetchedResultsController`,您必须使用谓词. (2认同)

Mac*_*nik 9

这是正确的谓词:

[NSPredicate predicateWithFormat:@"SELF = %@", objectID];
Run Code Online (Sandbox Code Playgroud)

哪里objectIDNSManagedObjectID实例.