iphone - 核心数据 : store images to DB or not?

标签 iphone image core-data

我正在制作一个应用程序,它从网站上为某些用户名拍摄照片,并将其显示在带有用户名的 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/

相关文章:

c# - Vector3.Lerp 无法在我的相机上工作

python - 从图像中裁剪出互补区域

ios - 确保“今天”扩展程序已更新了核心数据中的信息

javascript - Android 横向/纵向视口(viewport)不同

iphone - 如何在 objective-c 中创建自定义异常?

java - 如何在 java webapp 中的服务器上保存和检索图像

objective-c - 段错误 11 Objective-C,但 C 中没有

swift - 使用通用函数从云记录(或其他外部源)填充对象

ios - NSManagedObject 集合

ios - 根据内容调整 UILabel 的大小