我正在制作一个应用程序,它从网站上为某些用户名拍摄照片,并将其显示在带有用户名的 UITable 中,然后当单击用户名时,它会显示该用户的照片,然后单击照片名称,它会显示全屏照片。
我的问题是我正在使用 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];
}
最佳答案
首先,始终以可用的格式(例如 PNG 或 JPEG)而不是 NSData 存储图像。这将为您省去很多麻烦。
二、二进制数据的存储规则是:
- < 100kb 与相关数据存储在同一个表中
- < 1mb 存储在通过关系附加的单独表中,以避免不必要的加载
-
1mb store on disk and reference it inside of Core Data
更新
Core Data 内部的存储应该是二进制的,您可以为其编写访问器方法。看看这个答案:Core data images from desktop to iphone
更新
我链接到的示例代码描述了如何在 NSManagedObject 子类中创建访问器,该访问器将在 UIImage 和二进制数据之间来回转换图像。
关于iphone - 核心数据 : store images to DB or not?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2573072/