1

在将获取限制为多个属性时,似乎无法弄清楚从关系中获取属性的技巧。在下面的代码中,“缩略图”是实体“照片”的可转换 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>";
}

但是当我尝试使用如下的“图像”对象时

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];
4

1 回答 1

1

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

从文档:

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

也许您仍在考虑数据库查询,您可以选择性地选择要获取的“字段”。这在 Core Data 中不是必需的,它是一个对象图,而不是一个数据库

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

尝试使用普通实体进行获取。您可以期望它“正常工作”。

于 2013-05-11T19:54:55.393 回答