保存和加载图片的正确方法

时间:2011-03-01 13:15:45

标签: ios objective-c cocoa-touch uiimage

我正在创建一个小应用程序,用户可以在其中创建游戏配置文件,输入一些数据和可以用相机拍摄的照片。

我在NSUserDefaults的帮助下保存了大部分个人资料数据,但有朋友不鼓励我在NSUserDefault保存个人资料图片。

在我的应用中本地正确 保存和检索图片的方式是什么?

3 个答案:

答案 0 :(得分:18)

您应将其保存在 Documents Cache 文件夹中。这是怎么做的。

保存Documents文件夹:

NSString* path = [NSHomeDirectory() stringByAppendingString:@"/Documents/myImage.png"];

BOOL ok = [[NSFileManager defaultManager] createFileAtPath:path 
          contents:nil attributes:nil];

if (!ok) 
{
    NSLog(@"Error creating file %@", path);
} 
else 
{
    NSFileHandle* myFileHandle = [NSFileHandle fileHandleForWritingAtPath:path];
   [myFileHandle writeData:UIImagePNGRepresentation(yourImage)];
   [myFileHandle closeFile];
}

Documents文件夹加载:

NSFileHandle* myFileHandle = [NSFileHandle fileHandleForReadingAtPath:path];
UIImage* loadedImage = [UIImage imageWithData:[myFileHandle readDataToEndOfFile]];

您还可以使用 UIImageJPEGRepresentation UIImage保存为JPEG文件。如果您想将其保存在Cache目录中,请使用:

[NSHomeDirectory() stringByAppendingString:@"/Library/Caches/"]

答案 1 :(得分:6)

执行此操作的一种方法是使用应用程序的文档目录。这是特定于应用程序的,并且对其他应用程序不可见 如何创建:
只需向App Delegate添加静态函数,并使用需要路径的函数

- (NSString )applicationDocumentDirectory {
    /
     Returns the path to the application's documents directory.
     */ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
    return basePath;
}
希望它帮助..

答案 2 :(得分:1)

我认为this("iphone-user-defaults-and-uiimages")帖子可以解决您的问题。不要将blob保存到属性列表,例如NSUserDefaults。在你的情况下,我会直接写入磁盘。