将 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
是哪个值,什么时候?提取结果中的NSDictionary
s有哪些key&value?
我想通了,我错过了一件愚蠢的事情,我从未初始化图像数组,所以它总是为零。它现在工作得很好。非常感谢以上是关于将 NSData 数组转换为 UIImage 数组的主要内容,如果未能解决你的问题,请参考以下文章
将UIImage转换为NSData并在Swift中转换回UIImage?
如何将 UIImage 转换为 NSData 或 CFDataRef?