从 CoreData 检索 NSImage - Mac OS X

Posted

技术标签:

【中文标题】从 CoreData 检索 NSImage - Mac OS X【英文标题】:Retrieving NSImage from CoreData - Mac OS X 【发布时间】:2012-12-28 07:26:24 【问题描述】:

我正在尝试将图像添加到核心数据中并在需要时加载它。我目前正在将 NSImage 添加到核心数据中,如下所示:

Thumbnail *testEntity = (Thumbnail *)[NSEntityDescription insertNewObjectForEntityForName:@"Thumbnail" inManagedObjectContext:self.managedObjectContext];
NSImage *image = rangeImageView.image;
testEntity.fileName = @"test";
testEntity.image = image;
NSError *error;
[self.managedObjectContext save:&error];

Thumbnail 是实体名称,我在 Thumbnail 实体下有两个属性 - 文件名(NSString)和图像(id - 可转换)。

我正在尝试按如下方式检索它们:

NSManagedObjectContext *context = [self managedObjectContext];

NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init];

NSEntityDescription *imageEntity = [NSEntityDescription entityForName:@"Thumbnail" inManagedObjectContext:[context valueForKey:@"image"]];

[fetchRequest setEntity:imageEntity];

NSError *error;

NSArray * array = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];

if (array == nil) 

    NSLog(@"Testing: No results found");

else 



   _coreDataImageView.image = [array objectAtIndex:0];

我最终得到了这个错误:

     [<NSManagedObjectContext 0x103979f60> valueForUndefinedKey:]: this class is not key value coding-compliant for the key image.

图片已添加但无法检索。 关于如何进行此操作的任何想法?我做得对吗?

【问题讨论】:

【参考方案1】:

错误在这一行

NSEntityDescription *imageEntity = [NSEntityDescription entityForName:@"Thumbnail"
          inManagedObjectContext:[context valueForKey:@"image"]];

您不能将valueForKey:@"image" 应用于托管对象上下文。您必须将其应用于获取的对象(或使用获取的对象的image 属性)。

还要注意executeFetchRequest: 仅在发生错误时才返回nil。如果没有找到实体,则返回一个空数组。

NSEntityDescription *imageEntity = [NSEntityDescription entityForName:@"Thumbnail" inManagedObjectContext:context];
[fetchRequest setEntity:imageEntity];

NSError *error;
NSArray * array = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (array == nil) 
    NSLog(@"Testing: Fetch error: %@", error);
 else if ([array count] == 0) 
    NSLog(@"Testing: No results found");
else 
   Thumbnail *testEntity = [array objectAtIndex:0];
   NSImage *image = testEntity.image;
   _coreDataImageView.image = image;

【讨论】:

我最终得到这个错误:警告 - 试图解码 NSCGSImageRep 2012-12-28 16:00:01.868 The Template[10703:503] *** -[__NSArrayI objectAtIndex:]: index 0超出空数组的界限当我执行 [array count] 的 NSLog 时,我得到的答案是 5 或某个数字。 @DesperateLearner:我已将答案中的代码分成多行。您究竟在哪一行得到了异常? @DesperateLearner:我已经测试了代码,可以成功保存和加载NSImage,所以应该是正确的。

以上是关于从 CoreData 检索 NSImage - Mac OS X的主要内容,如果未能解决你的问题,请参考以下文章

从 CoreData 检索的 TableView 上的图像

从 coredata 表中检索数据到 UIPickerView(在 textField 内)

从实体具有 NSSet 的 coredata 中检索数据

从 JSON + Swift 或 ObjC 检索数据时如何处理 CoreData 中的关系

如何从 NSImage/UIImage 获取 AVFrame(ffmpeg)

从像素数组问题中获取 NSImage (Swift)