将 NSData 数组转换为 UIImage 数组

Posted

技术标签:

【中文标题】将 NSData 数组转换为 UIImage 数组【英文标题】:Convert array of NSData to array of UIImage 【发布时间】:2015-08-18 23:41:38 【问题描述】:

事情就是这样。在我的应用程序中,我想在 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'

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

提前致谢

【问题讨论】:

这意味着data 真的是NSKnownKeysDictionary1,而不是NSData 对象。 self.photos 不是 NSData 的数组,就像您的代码所假设的那样。 是的,先生,您说的很对。现在我在将图像添加到图像数组时遇到问题。由于某种原因,它返回 null 【参考方案1】:

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

[fetchRequest setResultType:NSDictionaryResultType];

这意味着executeFetchRequest... 返回的数组包含NSDictionary 对象,键值对对应于您指定的属性。

convertDataToImage 中的代码应如下所示:

for (NSDictionary *dictionary in self.photos) 
    NSData *data = dictionary[@"smallphoto"];
    ...

如果您指定了除smallphoto 以外的其他属性来获取,您当然会酌情替换该字符串。

【讨论】:

很好!错误消失了,但图像返回 nil,因此图像数组也为 nil。 我的意思是数组返回零。就像没有添加图像一样 @LeonardoRangel 我不明白你的意思。 nil 是哪个值,什么时候?提取结果中的NSDictionarys有哪些key&value? 我想通了,我错过了一件愚蠢的事情,我从未初始化图像数组,所以它总是为零。它现在工作得很好。非常感谢

以上是关于将 NSData 数组转换为 UIImage 数组的主要内容,如果未能解决你的问题,请参考以下文章

将UIImage转换为NSData并在Swift中转换回UIImage?

将UIImage转换为NSData并返回UIImage

如何将 UIImage 转换为 NSData 或 CFDataRef?

将 UIImage 转换为 NSData 并与核心数据一起保存

如何快速将字节数组转换为 base64 字符串?

将 NSData 转换为 JSON 对象数组