gpt4 book ai didi

ios - iPhone UIImage - 数据持久化

转载 作者:行者123 更新时间:2023-11-29 05:08:08 24 4
gpt4 key购买 nike

有关应用程序 session 之间数据持久性的简单问题。

我的应用程序允许用户使用 UIImagePickerController 从库中选择图像。然后,所选照片将用作应用程序的背景。

由于 UIImagePickerController 委托(delegate)方法实际上返回图像而不是图像路径,我想知道在用户 session 中保留此图像的最佳方法是什么?

我目前不需要保留任何其他数据,因为其他所有数据都是从 SQL Server 中提取的,但我不希望增加必须将图像存储在服务器中的开销,这意味着每次用户打开应用程序时,背景图像首先必须从服务器下载到字节数组中,然后转换为图像。

我找到了以下可以保存图像的代码:

- (void)saveImage:(UIImage *)image withName:(NSString *)name {
//save image
NSData *data = UIImageJPEGRepresentation(image, 1.0);
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:name];
[fileManager createFileAtPath:fullPath contents:data attributes:nil];

}

我目前不在 Mac 上,因此无法测试此代码,但我对上面的代码有几个问题:

我不希望文件系统中出现大量文件。所以我想要一个背景文件(background.png);上面的代码将如何处理该文件已经存在的情况?

它会覆盖现有文件还是会抛出错误?

我该如何再次加载图像?

最佳答案

您必须先删除该文件:

- (void)saveImage:(UIImage *)image withName:(NSString *)name {
//save image
NSData *data = UIImageJPEGRepresentation(image, 1.0);
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:name];

NSError *error = nil;
if( [fileManager fileExistsAtPath:fullPath] ){
if( ! [fileManager removeItemAtPath:fullPath error:&error] ) {
NSLog(@"Failed deleting background image file %@", error);
// the write below should fail. Add your own flag and check below.
}
}
[data writeToFile:fullPath atomically:YES];
}

回读应该按如下方式进行:

...
UIImage *bgImage = [UIImage imageWithContentsOfFile:fullPath];
...

关于ios - iPhone UIImage - 数据持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1789033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com