获取关系对象

apg*_*pgl 6 macos cocoa core-data objective-c 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];
Run Code Online (Sandbox Code Playgroud)

现在,我想在该循环内检索由A的关系指向的所有对象B的数组.我怎样才能实现这一点?我应该创建另一个获取请求还是更实用的方法?

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

Mar*_*ams 10

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];
Run Code Online (Sandbox Code Playgroud)

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