我正在创建一个应用程序,从网站上获取一些用户名的照片,并在用户名的UITable中显示,然后在点击用户名时显示该用户的照片,然后点击显示全屏照片的照片名称。< / p>
我的问题是我正在使用NSData从互联网上获取照片。我是否必须将数据保存到CoreData?当按下用户名时,它会创建NSData并从互联网下载照片并在UITable上显示。这需要时间。
什么是好方法?以及如何将此图像保存到CoreData?
我正在使用这种方法
NSData *imageData=[flickr dataForPhotoID:firstPhoto.id fromFarm:firstPhoto.farm
onServer:firstPhoto.server withSecret:firstPhoto.secret inFormat:
FlickrFetcherPhotoFormatSquare];
这里定义dataForPhotoID方法
- (NSData *)dataForPhotoID:(NSString *)photoID fromFarm:(NSString *)farm
onServer:(NSString *)server withSecret:(NSString *)secret
inFormat:(FlickrFetcherPhotoFormat)format {
#if TEST_HIGH_NETWORK_LATENCY
sleep(1);
#endif
NSString *formatString;
switch (format) {
case FlickrFetcherPhotoFormatSquare: formatString = @"s"; break;
case FlickrFetcherPhotoFormatLarge: formatString = @"b"; break;
}
NSString *photoURLString = [NSString stringWithFormat:@"http://farm%@.static.flickr.com/%@/%@_%@_%@.jpg", farm, server, photoID, secret, formatString];
NSURL *url = [NSURL URLWithString:photoURLString];
return [NSData dataWithContentsOfURL:url];
}
答案 0 :(得分:55)
首先,始终将图像存储为可用格式,例如PNG或JPEG,而不是NSData。这将为您节省很多麻烦。
其次,存储二进制数据的规则是:
1mb存储在磁盘上并在Core Data中引用它
Core Data中的存储应该是二进制文件,您可以为它编写访问器方法。看一下这个答案:Core data images from desktop to iphone
我链接的示例代码描述了如何在NSManagedObject子类中创建访问器,它将在UIImage和二进制数据之间来回转换图像。
答案 1 :(得分:1)
您可以直接在CoreData中存储 UIImage 对象,只需使用可转换数据类型,即可开始使用