objective-c - 获取关系对象

标签 objective-c cocoa macos core-data osx-lion

CoreData 初学者

我有一个关于 CoreData 的简单问题。我的模型有两个实体,现在称为 A 和 B。实体 A 与 B 实体之间存在一对多关系,后者与实体 A 之间存在反向关系。

我正在使用以下代码检索实体 A:

NSManagedObjectContext *context = [self managedObjectContext];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"A"
                                          inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"name"
                                                           ascending:YES];
[request setSortDescriptors:[NSArray arrayWithObject:descriptor]];

NSError *error = nil;
NSArray *items = [context executeFetchRequest:request error:&error];

if (error) /* ... */;

for (id item in items)
{
    /* ... */
}

[request release];
[descriptor release];

现在我想在该循环内检索由 A 的关系指向的所有对象 B 的数组。我该如何实现?我应该创建另一个获取请求还是有更实用的方法?

我搜索了 StackOverflow 并发现了类似的问题,但有时太模糊了。

最佳答案

NSFetchRequest 有一个名为 -setRelationshipKeyPathsForPrefetching: 的实例方法。

此方法采用一个键名数组,这些键名将用于预取在与这些键路径的关系中定义的任何对象。考虑您的示例,使用新代码更新:

NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];
NSString *relationshipKeyPath = @"bObjects"; // Set this to the name of the relationship on "A" that points to the "B" objects;
NSArray *keyPaths = [NSArray arrayWithObject:relationshipKeyPath];
[request setRelationshipKeyPathsForPrefetching:keyPaths];

现在,一旦您完成了获取请求,所有这些关系对象都应该出错并准备就绪。

关于objective-c - 获取关系对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6878286/

相关文章:

objective-c - 在 Cocoa 中将自定义对象写入 .plist

java - Mac 上的 IntelliJ 无法检测 JAVA 的语法错误

macos - NSUserDefaults 是否与包标识符相关联?

python - 安装了 mitmproxy OSX 但找不到 .mitproxy 目录

iPhone iOS 如何将文本从 UITextView 导出到文本文件以进行跨平台编辑? (Mac、PC、iPhone 等)

iPhone:应用程序在特定设备上崩溃

ios - 使用头部或尾部来选择将生成的 Sprite 之间的位置,并选择 Sprite 移动的速度

objective-c - 窗口关闭时 NSPopover 崩溃

python - 从 XCode 运行 python 脚本时不写入文件

objective-c - 如何将自定义 View 单元格置于 NSTableView 中的表格行上方?