核心数据:是否将图像存储到数据库?

时间:2010-04-03 23:44:22

标签: iphone image core-data

我正在创建一个应用程序,从网站上获取一些用户名的照片,并在用户名的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];
}

2 个答案:

答案 0 :(得分:55)

首先,始终将图像存储为可用格式,例如PNG或JPEG,而不是NSData。这将为您节省很多麻烦。

其次,存储二进制数据的规则是:

  • &LT; 100kb与相关数据存储在同一个表中
  • &LT; 1mb存储在一个单独的表中,通过关系连接以避免不必要的加载
  •   

    1mb存储在磁盘上并在Core Data中引用它

更新

Core Data中的存储应该是二进制文件,您可以为它编写访问器方法。看一下这个答案:Core data images from desktop to iphone

更新

我链接的示例代码描述了如何在NSManagedObject子类中创建访问器,它将在UIImage和二进制数据之间来回转换图像。

答案 1 :(得分:1)

您可以直接在CoreData中存储 UIImage 对象,只需使用可转换数据类型,即可开始使用