是否可以将图像另存NSUserDefaults
为对象,然后检索以供进一步使用?
注意! 如果您要在iOS8 / XCODE6以下工作,请参阅下面的更新
对于仍在寻找答案的用户,这里提供了“建议”方式的代码,用于将图像保存在NSUserDefaults中。您不应该将图像数据直接保存到NSUserDefaults中!
写入数据:
// Get image data. Here you can use UIImagePNGRepresentation if you need transparency
NSData *imageData = UIImageJPEGRepresentation(image, 1);
// Get image path in user's folder and store file with name image_CurrentTimestamp.jpg (see documentsPathForFileName below)
NSString *imagePath = [self documentsPathForFileName:[NSString stringWithFormat:@"image_%f.jpg", [NSDate timeIntervalSinceReferenceDate]]];
// Write image data to user's folder
[imageData writeToFile:imagePath atomically:YES];
// Store path in NSUserDefaults
[[NSUserDefaults standardUserDefaults] setObject:imagePath forKey:kPLDefaultsAvatarUrl];
// Sync user defaults
[[NSUserDefaults standardUserDefaults] synchronize];
读取数据:
NSString *imagePath = [[NSUserDefaults standardUserDefaults] objectForKey:kPLDefaultsAvatarUrl];
if (imagePath) {
self.avatarImageView.image = [UIImage imageWithData:[NSData dataWithContentsOfFile:imagePath]];
}
documentsPathForFileName:
- (NSString *)documentsPathForFileName:(NSString *)name {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
return [documentsPath stringByAppendingPathComponent:name];
}
对于iOS8 / XCODE6 正如以下注释中提到的tmr和DevC,xcode6 / ios8存在问题。xcode5和xcode
6安装过程之间的区别在于,xcode6 会 在每次在xcode中运行 应用程序 后 更改应用程序UUID
(请参阅路径中突出显示的部分:/ var / mobile / Containers / Data / Application /
B0D49CF5-8FBE-4F14-87AE-FA8C16A678B1 / Documents / image.jpg)。
因此,有两种解决方法:
这是快速版本的代码,作为奖励(使用第二种方法):
写入数据:
let imageData = UIImageJPEGRepresentation(image, 1)
let relativePath = "image_\(NSDate.timeIntervalSinceReferenceDate()).jpg"
let path = self.documentsPathForFileName(relativePath)
imageData.writeToFile(path, atomically: true)
NSUserDefaults.standardUserDefaults().setObject(relativePath, forKey: "path")
NSUserDefaults.standardUserDefaults().synchronize()
读取数据:
let possibleOldImagePath = NSUserDefaults.standardUserDefaults().objectForKey("path") as String?
if let oldImagePath = possibleOldImagePath {
let oldFullPath = self.documentsPathForFileName(oldImagePath)
let oldImageData = NSData(contentsOfFile: oldFullPath)
// here is your saved image:
let oldImage = UIImage(data: oldImageData)
}
documentsPathForFileName:
func documentsPathForFileName(name: String) -> String {
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true);
let path = paths[0] as String;
let fullPath = path.stringByAppendingPathComponent(name)
return fullPath
}
问题内容: 我有以下测试代码: println(data0)的输出为nil。 我的代码有问题吗?Swift字典是现在还是最终版本中的属性列表? 问题答案: Swift 2,Xcode 7 更新 : 如@atxe所示,NSUserDefaults词典现在映射为。这是Objective-C“轻量级泛型”的结果,它允许将Objective-C方法声明为 (默认对象必须是属性列表,尤其是字典键只能是字符串
问题内容: 我想将Swift样式字符串数组保存到NSUserDefaults中,但是代码中的“ if”语句通常说returnValue始终为nil。 在稍后的代码中(iOS 8),我想使用“ food + = [” spaghetti“]添加新条目。 问题答案: 以下代码应帮助您解决问题: 但是,使用前面的代码,如果您设置,则会遇到问题,因为不会返回。为了避免这种情况,您可能更喜欢以下代码:
问题内容: 我有一个新闻和一个消息。所述含有选择加入到阵列时teamObjects的的tableView。我想将此数组添加到其中,以便可以从其中包含需要teamObjects的url请求的访问它们。但是我不断得到: “试图为关键团队插入非财产列表对象(“”) 如果有比将其存储在更好的方法,我愿意接受其他建议 方法 我的对象 问题答案: 实际上,您将需要将自定义对象归档到其中,然后将其保存到用户默认
MainActivity.class MainActivity中的
问题内容: 我正在通过jQuery $ .ajax加载图像路径,并在显示图像之前先检查它是否确实存在。我可以使用图像加载/就绪事件或类似的方法来确定文件路径有效吗? 将.myimage设置为显示:无,我希望这样做 这样有可能吗? 问题答案: 好吧,你可以绑定处理程序… 像这样, 好吧,您已经可以使用load-event 问题是如果禁用Javascript,图像将永远不会显示…
问题内容: 我需要创建一个数组来添加具有这种格式的对象,例如Swift中的字典:[“ key1”:“ value1”,“ key2”:“ value2”] 当我尝试全部保存时是正确的,但是使用键读取时会崩溃。var obj需要什么类型的数据? 问题答案: 这个问题的意思是“数组数组”,但是我想大多数人可能只是想知道如何将数组保存到。对于那些人,我将添加一些常见示例。 保存数组 检索数组 整数数组