核心数据:获取关系属性

时间:2013-05-11 17:59:52

标签: ios core-data nsfetchrequest

在将抓取限制为多个属性时似乎无法弄清楚从关系中获取属性的技巧。在下面的代码中,“thumbnail”是实体“Photo”的可转换UIImage属性。在使用关键字“缩略图”的字典数组中,这总是很好。我无法弄清楚的是第二个属性/属性,其中“previewImage”是Photo中另一个名为“Image”的实体之间的关系,该实体具有可转换属性“uiImage”(这是一个UIImage)。

我试过这个:

[fetchRequest setPropertiesToFetch:@[@"thumbnail", @"previewImage.uiImage"]];

但是我收到了这个错误:

-[NSExpressionDescription valueTransformerName]: unrecognized selector sent to instance 0x13078920

我试过这个:

[fetchRequest setPropertiesToFetch:@[@"thumbnail", @"previewImage"]];

我在每个词典中得到两个项目

{
   previewImage = "0xbabba90 <x-coredata://03FF7129-1345-4BAE-A74E-2FF5A2B38CDC/Image/p5>";
   thumbnail = "<UIImage: 0xbabbc60>";
}

但是当我尝试使用下面的“Image”对象时

NSDictionary *dict = [self.photos objectAtIndex:0];
Image *theImage = (Image *)[dict objectForKey:@"previewImage"];
[self.delegate photoCollectionViewController:self didSelectPreviewImage:theImage.uiImage];

我收到此错误

"[_NSObjectID_48_0 uiImage]: unrecognized selector sent to instance 0xbabba90"

我甚至在请求中抛出了这个

[fetchRequest setRelationshipKeyPathsForPrefetching:@[@"previewImage.uiImage"]];

所以,我想我正在挣扎而没有得到这个。任何帮助,将不胜感激。谢谢!

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Photo" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setResultType:NSDictionaryResultType];

1 个答案:

答案 0 :(得分:1)

使用NSDictionaryResultType,您可以方便地获取实体的属性。它不适用于遍历关系。这就是为什么当你做出符合逻辑的事情时会出现错误:获取previewImage.uiImage

来自文档:

  

属性描述可以表示属性,一对一关系或表达式。

也许您仍然在考虑数据库查询,在那里您有选择地选择要获取的“字段”。这在核心数据中不是必需的,核心数据是对象图,而不是数据库

相反,只需抓取您的NSManagedObject。如果你担心记忆,你不应该。核心数据使用一种名为 faulting 的机制来仅获取它所需的内容。实际上,上述神秘的"<x-coredata://03FF7129-1345-4BAE-A74E-2FF5A2B38CDC/Image/p5>"非常类似于在控制台中显示故障的方式。

尝试使用普通实体进行提取。你可以期待它“正常工作”。

相关问题