将NSData数组转换为UIImage数组

时间:2015-08-18 23:41:39

标签: ios objective-c arrays core-data uiimage

这是事情。在我的应用程序中,我想在CollectionView上显示存储在Core Data中的照片(是的,我使用外部存储)。要仅获取我的实体中的照片,请执行以下操作:

NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"SmallThing"];
[fetchRequest setResultType:NSDictionaryResultType];
[fetchRequest setPropertiesToFetch:[NSArray arrayWithObjects:@"smallphoto", nil]];
self.photos = [[managedObjectContext executeFetchRequest:fetchRequest error:nil]mutableCopy];

这似乎工作正常,它返回照片的数据并将其存储在数组上。然后我创建了一个方法将其转换为UIImage,因此我可以存储在另一个数组中,如下所示:

- (NSMutableArray *)convertDataToImage:(UIImage *)image {
for (NSData *data in self.photos) {
    image = [[UIImage alloc] initWithData:data];
    [self.images addObject:image];
}
return self.images;
}

当我到达image = [[UIImage alloc] initWithData:data行时,它崩溃了,我收到以下错误:

[16697:2367280] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSKnownKeysDictionary1 length]: unrecognized selector sent to instance 0x7fae0c117cc0'

我不知道我还能做些什么。有什么想法吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

您明确告诉获取请求返回带有以下行的字典:

LUT[0]

这意味着[fetchRequest setResultType:NSDictionaryResultType]; 返回的数组包含executeFetchRequest...个对象,其键值对与您指定的属性相对应。

NSDictionary中的代码应与以下内容相符:

convertDataToImage

如果您指定了不同于for (NSDictionary *dictionary in self.photos) { NSData *data = dictionary[@"smallphoto"]; ... } 以外的其他属性,那么您当然会在适当的时候替换该字符串。