一些与iOS照片相关的应用程序将由该应用程序创建的图像存储在照片库以外的某个位置。例如,Fat Booth在应用程序启动时显示一个滚动列表,其中包含使用该应用程序创建的照片。请注意,这些照片会被持久化,而用户并没有明确将它们保存到照片库中。最简单的方法是什么来在iOS应用程序内保存和持久化图像?
我所熟悉的唯一持久存储方式是NSUserDefaults和密钥链。然而,我从未听说过这些用于存储诸如图像之类的较大数据。现在我想知道Core Data是否是最简单的方法。
最简单的方法是将其保存在应用程序的“文档”目录中,并像这样使用NSUserDefaults保存路径:
NSData *imageData = UIImagePNGRepresentation(newImage);
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *imagePath =[documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png",@"cached"]];
NSLog(@"pre writing to file");
if (![imageData writeToFile:imagePath atomically:NO])
{
NSLog(@"Failed to cache image data to disk");
}
else
{
NSLog(@"the cachedImagedPath is %@",imagePath);
}
然后将imagePath保存在NSUserDefaults中的某个字典中,或者按自己喜欢的方式保存。要检索它,只需要执行:
NSString *theImagePath = [yourDictionary objectForKey:@"cachedImagePath"];
UIImage *customImage = [UIImage imageWithContentsOfFile:theImagePath];
对于Swift:
let imageData = UIImagePNGRepresentation(selectedImage)
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
let imagePath = paths.stringByAppendingPathComponent("cached.png")
if !imageData.writeToFile(imagePath, atomically: false)
{
println("not saved")
} else {
println("saved")
NSUserDefaults.standardUserDefaults().setObject(imagePath, forKey: "imagePath")
}
对于 Swift 2.1:
let imageData = UIImagePNGRepresentation(selectedImage)
let documentsURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
let imageURL = documentsURL.URLByAppendingPathComponent("cached.png")
if !imageData.writeToURL(imageURL, atomically: false)
{
print("not saved")
} else {
print("saved")
NSUserDefaults.standardUserDefaults().setObject(imageData, forKey: "imagePath")
}
stringByAppendingPathComponent
在Swift 2.1中不可用,因此您可以使用URLByAppendingPathComponent。
在这里获取更多信息。