2012-12-28 24 views
0

我试图将图像添加到核心数据并在需要时加载它。我目前加入到NSImage中的核心数据如下:从CoreData检索NSImage - Mac OS X

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

缩略图是实体的名字,我有缩略图的实体下两个属性 - 文件名(的NSString)和图像(ID - 变形)。

我想如下retreive他们:

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. 

的图像,但无法检索。
有关如何解决这个问题的任何想法?我做对了吗?

回答

3

的错误是在这一行

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; 
} 
+0

我结束了这样的错误: 警告 - 试图NSCGSImageRep 2012-12-28 16解码:00:01.868的模板[10703:503] *** - [__ NSArrayI objectAtIndex:]:索引0超出空数组的界限 当我做一个[数组计数]的NSLog我得到的答案为5或某些数字。 – DesperateLearner

+0

@DesperateLearner:我已将我的答案中的代码分成多行。你究竟在哪条线上得到例外? –

+0

@DesperateLearner:我测试了代码,可以成功保存并加载一个'NSImage',所以它应该是正确的。 –