Ios 是否以默认值保存图像?

Ios 是否以默认值保存图像?,ios,objective-c,iphone,swift,ipad,Ios,Objective C,Iphone,Swift,Ipad,是否可以将图像作为对象保存到NSUserDefaults中,然后检索以供进一步使用?将图像保存到NSUserDefaults中: [[NSUserDefaults standardUserDefaults] setObject:UIImagePNGRepresentation(image) forKey:key]; NSData* imageData = [[NSUserDefaults standardUserDefaults] objectForKey:key]; UIImage* ima

是否可以将图像作为对象保存到NSUserDefaults中,然后检索以供进一步使用?

将图像保存到NSUserDefaults中:

[[NSUserDefaults standardUserDefaults] setObject:UIImagePNGRepresentation(image) forKey:key];
NSData* imageData = [[NSUserDefaults standardUserDefaults] objectForKey:key];
UIImage* image = [UIImage imageWithData:imageData];
要从NSUserDefault检索图像,请执行以下操作:

[[NSUserDefaults standardUserDefaults] setObject:UIImagePNGRepresentation(image) forKey:key];
NSData* imageData = [[NSUserDefaults standardUserDefaults] objectForKey:key];
UIImage* image = [UIImage imageWithData:imageData];

是的,你可以用。但由于它用于存储首选项,所以您可以更好地将图像保存到文档文件夹中


如果需要,您可以在NSUserDefaults中设置路径。

是,技术上可行,如中所示

[[NSUserDefaults standardUserDefaults] setObject:UIImagePNGRepresentation(image) forKey:@"foo"];

但这并不可取,因为plist不适合存放大量二进制数据,尤其是用户pref。最好将图像保存到用户文档文件夹,并将对该对象的引用存储为URL或路径。

将图像保存到NSUserDefault:

NSData *imageData; 
// create NSData-object from image
imageData = UIImagePNGRepresentation([dic objectForKey:[NSString stringWithFormat:@"%d",i]]); 
// save NSData-object to UserDefaults
[[NSUserDefaults standardUserDefaults] setObject:imageData forKey:[NSString stringWithFormat:@"%d",i]];
NSData *imageData;
// Load NSData-object from NSUserDefault
imageData = [[NSUserDefaults standardUserDefaults] valueForKey:[NSString stringWithFormat:@"%d",i]];
// get Image from NSData
[image setObject:[UIImage imageWithData:imageData] forKey:[NSString stringWithFormat:@"%d",i]];
从NSUserDefault加载图像:

NSData *imageData; 
// create NSData-object from image
imageData = UIImagePNGRepresentation([dic objectForKey:[NSString stringWithFormat:@"%d",i]]); 
// save NSData-object to UserDefaults
[[NSUserDefaults standardUserDefaults] setObject:imageData forKey:[NSString stringWithFormat:@"%d",i]];
NSData *imageData;
// Load NSData-object from NSUserDefault
imageData = [[NSUserDefaults standardUserDefaults] valueForKey:[NSString stringWithFormat:@"%d",i]];
// get Image from NSData
[image setObject:[UIImage imageWithData:imageData] forKey:[NSString stringWithFormat:@"%d",i]];

这在技术上是可能的,但并不可取。将映像保存到磁盘。NSUserDefaults用于小设置,而不是大的二进制数据文件。

来自apple文档

NSUserDefaults类为访问常见类型(如浮点、双精度、整数、布尔和URL)提供了方便的方法。默认对象必须是属性列表,即NSData、NSString、NSNumber、NSDate、NSArray或NSDictionary的实例(或集合实例的组合)。如果要存储任何其他类型的对象,通常应将其存档以创建NSData实例

您可以这样保存图像:-

[[NSUserDefaults standardUserDefaults] setObject:UIImagePNGRepresentation([UIImage imageNamed:@"yourimage.gif"])forKey:@"key_for_your_image"];
 NSData* imageData = [[NSUserDefaults standardUserDefaults]objectForKey:@"key_for_your_image"];
    UIImage* image = [UIImage imageWithData:imageData];
这样读:-

[[NSUserDefaults standardUserDefaults] setObject:UIImagePNGRepresentation([UIImage imageNamed:@"yourimage.gif"])forKey:@"key_for_your_image"];
 NSData* imageData = [[NSUserDefaults standardUserDefaults]objectForKey:@"key_for_your_image"];
    UIImage* image = [UIImage imageWithData:imageData];

注意!如果您在iOS8/XCODE6下工作,请参见下面的“我的更新”

对于那个些仍在寻找答案的人来说,这里有一个“建议”的代码,可以用默认值保存图像。不应将图像数据直接保存到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]];
}
- (NSString *)documentsPathForFileName:(NSString *)name {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsPath = [paths objectAtIndex:0];

    return [documentsPath stringByAppendingPathComponent:name];
}
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)
}
func documentsPathForFileName(name: String) -> String {
    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true);
    let path = paths[0] as String;
    let fullPath = path.stringByAppendingPathComponent(name)

    return fullPath
}
NSUserDefaults.standardUserDefaults().setObject(UIImagePNGRepresentation(chosenImage), forKey: kKeyImage)
if let imageData = NSUserDefaults.standardUserDefaults().objectForKey(kKeyImage),
            let image = UIImage(data: imageData as! NSData){
            // use your image here...
}
UserDefaults.standard.register(defaults: ["key":UIImageJPEGRepresentation(image, 100)!])
UserDefaults.standard.set(UIImageJPEGRepresentation(image, 100), forKey: "key")
let imageData = UserDefaults.standard.value(forKey: "key") as! Data
let imageFromData = UIImage(data: imageData)!
读取数据:

// 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]];
}
- (NSString *)documentsPathForFileName:(NSString *)name {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsPath = [paths objectAtIndex:0];

    return [documentsPath stringByAppendingPathComponent:name];
}
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)
}
func documentsPathForFileName(name: String) -> String {
    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true);
    let path = paths[0] as String;
    let fullPath = path.stringByAppendingPathComponent(name)

    return fullPath
}
NSUserDefaults.standardUserDefaults().setObject(UIImagePNGRepresentation(chosenImage), forKey: kKeyImage)
if let imageData = NSUserDefaults.standardUserDefaults().objectForKey(kKeyImage),
            let image = UIImage(data: imageData as! NSData){
            // use your image here...
}
UserDefaults.standard.register(defaults: ["key":UIImageJPEGRepresentation(image, 100)!])
UserDefaults.standard.set(UIImageJPEGRepresentation(image, 100), forKey: "key")
let imageData = UserDefaults.standard.value(forKey: "key") as! Data
let imageFromData = UIImage(data: imageData)!
文档文件名:

// 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]];
}
- (NSString *)documentsPathForFileName:(NSString *)name {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsPath = [paths objectAtIndex:0];

    return [documentsPath stringByAppendingPathComponent:name];
}
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)
}
func documentsPathForFileName(name: String) -> String {
    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true);
    let path = paths[0] as String;
    let fullPath = path.stringByAppendingPathComponent(name)

    return fullPath
}
NSUserDefaults.standardUserDefaults().setObject(UIImagePNGRepresentation(chosenImage), forKey: kKeyImage)
if let imageData = NSUserDefaults.standardUserDefaults().objectForKey(kKeyImage),
            let image = UIImage(data: imageData as! NSData){
            // use your image here...
}
UserDefaults.standard.register(defaults: ["key":UIImageJPEGRepresentation(image, 100)!])
UserDefaults.standard.set(UIImageJPEGRepresentation(image, 100), forKey: "key")
let imageData = UserDefaults.standard.value(forKey: "key") as! Data
let imageFromData = UIImage(data: imageData)!
适用于iOS8/XCODE6 正如tmr和DevC在下面的评论中提到的,xcode6/ios8存在一个问题。xcode5和xcode6安装过程之间的区别在于,每次在xcode中运行后,xcode6都会更改应用程序UUID(请参见路径:/var/mobile/Containers/Data/Application/B0D49CF5-8FBE-4F14-87AE-FA8C16A678B1/Documents/image.jpg中的高亮部分)

因此,有两种变通方法:

  • 跳过这个问题,因为一旦应用程序安装到真正的设备上,它就永远不会改变UUID(事实上是这样的,但它是新的应用程序)
  • 将相对路径保存到所需文件夹(在我们的示例中,保存到应用程序的根目录)
  • 下面是代码的swift版本作为奖励(第二种方法):

    写入数据:

    // 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]];
    }
    
    - (NSString *)documentsPathForFileName:(NSString *)name {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsPath = [paths objectAtIndex:0];
    
        return [documentsPath stringByAppendingPathComponent:name];
    }
    
    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)
    }
    
    func documentsPathForFileName(name: String) -> String {
        let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true);
        let path = paths[0] as String;
        let fullPath = path.stringByAppendingPathComponent(name)
    
        return fullPath
    }
    
    NSUserDefaults.standardUserDefaults().setObject(UIImagePNGRepresentation(chosenImage), forKey: kKeyImage)
    
    if let imageData = NSUserDefaults.standardUserDefaults().objectForKey(kKeyImage),
                let image = UIImage(data: imageData as! NSData){
                // use your image here...
    }
    
    UserDefaults.standard.register(defaults: ["key":UIImageJPEGRepresentation(image, 100)!])
    
    UserDefaults.standard.set(UIImageJPEGRepresentation(image, 100), forKey: "key")
    
    let imageData = UserDefaults.standard.value(forKey: "key") as! Data
    let imageFromData = UIImage(data: imageData)!
    
    读取数据:

    // 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]];
    }
    
    - (NSString *)documentsPathForFileName:(NSString *)name {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsPath = [paths objectAtIndex:0];
    
        return [documentsPath stringByAppendingPathComponent:name];
    }
    
    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)
    }
    
    func documentsPathForFileName(name: String) -> String {
        let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true);
        let path = paths[0] as String;
        let fullPath = path.stringByAppendingPathComponent(name)
    
        return fullPath
    }
    
    NSUserDefaults.standardUserDefaults().setObject(UIImagePNGRepresentation(chosenImage), forKey: kKeyImage)
    
    if let imageData = NSUserDefaults.standardUserDefaults().objectForKey(kKeyImage),
                let image = UIImage(data: imageData as! NSData){
                // use your image here...
    }
    
    UserDefaults.standard.register(defaults: ["key":UIImageJPEGRepresentation(image, 100)!])
    
    UserDefaults.standard.set(UIImageJPEGRepresentation(image, 100), forKey: "key")
    
    let imageData = UserDefaults.standard.value(forKey: "key") as! Data
    let imageFromData = UIImage(data: imageData)!
    
    文档文件名:

    // 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]];
    }
    
    - (NSString *)documentsPathForFileName:(NSString *)name {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsPath = [paths objectAtIndex:0];
    
        return [documentsPath stringByAppendingPathComponent:name];
    }
    
    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)
    }
    
    func documentsPathForFileName(name: String) -> String {
        let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true);
        let path = paths[0] as String;
        let fullPath = path.stringByAppendingPathComponent(name)
    
        return fullPath
    }
    
    NSUserDefaults.standardUserDefaults().setObject(UIImagePNGRepresentation(chosenImage), forKey: kKeyImage)
    
    if let imageData = NSUserDefaults.standardUserDefaults().objectForKey(kKeyImage),
                let image = UIImage(data: imageData as! NSData){
                // use your image here...
    }
    
    UserDefaults.standard.register(defaults: ["key":UIImageJPEGRepresentation(image, 100)!])
    
    UserDefaults.standard.set(UIImageJPEGRepresentation(image, 100), forKey: "key")
    
    let imageData = UserDefaults.standard.value(forKey: "key") as! Data
    let imageFromData = UIImage(data: imageData)!
    

    虽然可以将
    UIImage
    保存到
    NSUserDefaults
    ,但通常不建议使用,因为这不是保存图像的最有效方式;更有效的方法是将图像保存在应用程序的
    文档目录中

    -(UIImage *)loadImageWithFileName:(NSString *)fileName ofType:(NSString *)extension inDirectory:(NSString *)directoryPath {
        UIImage * result = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@.%@", directoryPath, fileName, [extension lowercaseString]]];
    
        return result;
    }
    
    -(void)saveImagesToPhotoAlbums:(NSArray *)images {
        for (int x = 0; x < [images count]; x++) {
            UIImage * image = [images objectAtIndex:x];
    
            if (image != nil) UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
        }
    }
    
    为了回答这个问题,我附上了你问题的答案,以及保存
    UIImage
    的更有效方法


    NSUserDefault(不推荐) 保存到NSUserDefaults

    此方法允许您将任何
    UIImage
    保存到
    NSUserDefaults

    -(void)saveImageToUserDefaults:(UIImage *)image ofType:(NSString *)extension forKey:(NSString *)key {
        NSData * data;
    
        if ([[extension lowercaseString] isEqualToString:@"png"]) {
            data = UIImagePNGRepresentation(image);
        } else if ([[extension lowercaseString] isEqualToString:@"jpg"]) {
            data = UIImageJPEGRepresentation(image, 1.0);
        }
    
        NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
        [userDefaults setObject:data forKey:key];
        [userDefaults synchronize];
    }
    
    -(UIImage *)loadImageFromUserDefaultsForKey:(NSString *)key {
        NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
        return [UIImage imageWithData:[userDefaults objectForKey:key]];
    }
    
    这就是你所说的:

    [self saveImageToUserDefaults:image ofType:@"jpg" forKey:@"myImage"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    
    UIImage * image = [self loadImageFromUserDefaultsForKey:@"myImage"];
    
    NSString * documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    [self saveImage:image withFileName:@"Ball" ofType:@"jpg" inDirectory:documentsDirectory];
    
    NSString * documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    UIImage * image = [self loadImageWithFileName:@"Ball" ofType:@"jpg" inDirectory:documentsDirectory];
    
    [self saveImagesToPhotoAlbums:images];
    

    从NSUserDefaults加载

    此方法允许您从
    NSUserDefaults
    加载任何
    UIImage

    -(void)saveImageToUserDefaults:(UIImage *)image ofType:(NSString *)extension forKey:(NSString *)key {
        NSData * data;
    
        if ([[extension lowercaseString] isEqualToString:@"png"]) {
            data = UIImagePNGRepresentation(image);
        } else if ([[extension lowercaseString] isEqualToString:@"jpg"]) {
            data = UIImageJPEGRepresentation(image, 1.0);
        }
    
        NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
        [userDefaults setObject:data forKey:key];
        [userDefaults synchronize];
    }
    
    -(UIImage *)loadImageFromUserDefaultsForKey:(NSString *)key {
        NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
        return [UIImage imageWithData:[userDefaults objectForKey:key]];
    }
    
    这就是你所说的:

    [self saveImageToUserDefaults:image ofType:@"jpg" forKey:@"myImage"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    
    UIImage * image = [self loadImageFromUserDefaultsForKey:@"myImage"];
    
    NSString * documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    [self saveImage:image withFileName:@"Ball" ofType:@"jpg" inDirectory:documentsDirectory];
    
    NSString * documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    UIImage * image = [self loadImageWithFileName:@"Ball" ofType:@"jpg" inDirectory:documentsDirectory];
    
    [self saveImagesToPhotoAlbums:images];
    

    更好的选择 保存到文档目录

    此方法允许您将任何
    ui图像
    保存到应用程序内的
    文档目录

    -(void)saveImage:(UIImage *)image withFileName:(NSString *)imageName ofType:(NSString *)extension inDirectory:(NSString *)directoryPath {
        if ([[extension lowercaseString] isEqualToString:@"png"]) {
            [UIImagePNGRepresentation(image) writeToFile:[directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", imageName, @"png"]] options:NSAtomicWrite error:nil];
        } else if ([[extension lowercaseString] isEqualToString:@"jpg"] || [[extension lowercaseString] isEqualToString:@"jpeg"]) {
            [UIImageJPEGRepresentation(image, 1.0) writeToFile:[directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", imageName, @"jpg"]] options:NSAtomicWrite error:nil];
        } else {
            NSLog(@"Image Save Failed\nExtension: (%@) is not recognized, use (PNG/JPG)", extension);
        }
    }
    
    这就是你所说的:

    [self saveImageToUserDefaults:image ofType:@"jpg" forKey:@"myImage"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    
    UIImage * image = [self loadImageFromUserDefaultsForKey:@"myImage"];
    
    NSString * documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    [self saveImage:image withFileName:@"Ball" ofType:@"jpg" inDirectory:documentsDirectory];
    
    NSString * documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    UIImage * image = [self loadImageWithFileName:@"Ball" ofType:@"jpg" inDirectory:documentsDirectory];
    
    [self saveImagesToPhotoAlbums:images];
    

    从文档目录加载

    此方法允许您从应用程序的
    文档目录
    加载任何
    UIImage

    -(UIImage *)loadImageWithFileName:(NSString *)fileName ofType:(NSString *)extension inDirectory:(NSString *)directoryPath {
        UIImage * result = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@.%@", directoryPath, fileName, [extension lowercaseString]]];
    
        return result;
    }
    
    -(void)saveImagesToPhotoAlbums:(NSArray *)images {
        for (int x = 0; x < [images count]; x++) {
            UIImage * image = [images objectAtIndex:x];
    
            if (image != nil) UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
        }
    }
    
    这就是你所说的:

    [self saveImageToUserDefaults:image ofType:@"jpg" forKey:@"myImage"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    
    UIImage * image = [self loadImageFromUserDefaultsForKey:@"myImage"];
    
    NSString * documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    [self saveImage:image withFileName:@"Ball" ofType:@"jpg" inDirectory:documentsDirectory];
    
    NSString * documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    UIImage * image = [self loadImageWithFileName:@"Ball" ofType:@"jpg" inDirectory:documentsDirectory];
    
    [self saveImagesToPhotoAlbums:images];
    

    另一种选择 将UIImage保存到照片库

    此方法允许您将任何
    ui图像
    保存到设备的
    照片库
    ,调用如下:

    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
    
    将多个UIImage保存到照片库中

    此方法允许您将多个
    ui图像
    保存到设备的
    照片库

    -(UIImage *)loadImageWithFileName:(NSString *)fileName ofType:(NSString *)extension inDirectory:(NSString *)directoryPath {
        UIImage * result = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@.%@", directoryPath, fileName, [extension lowercaseString]]];
    
        return result;
    }
    
    -(void)saveImagesToPhotoAlbums:(NSArray *)images {
        for (int x = 0; x < [images count]; x++) {
            UIImage * image = [images objectAtIndex:x];
    
            if (image != nil) UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
        }
    }
    

    其中,
    images
    是您的
    NSArray
    UIImages
    组成,适用于swift 2.2

    存储:

    // 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]];
    }
    
    - (NSString *)documentsPathForFileName:(NSString *)name {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsPath = [paths objectAtIndex:0];
    
        return [documentsPath stringByAppendingPathComponent:name];
    }
    
    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)
    }
    
    func documentsPathForFileName(name: String) -> String {
        let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true);
        let path = paths[0] as String;
        let fullPath = path.stringByAppendingPathComponent(name)
    
        return fullPath
    }
    
    NSUserDefaults.standardUserDefaults().setObject(UIImagePNGRepresentation(chosenImage), forKey: kKeyImage)
    
    if let imageData = NSUserDefaults.standardUserDefaults().objectForKey(kKeyImage),
                let image = UIImage(data: imageData as! NSData){
                // use your image here...
    }
    
    UserDefaults.standard.register(defaults: ["key":UIImageJPEGRepresentation(image, 100)!])
    
    UserDefaults.standard.set(UIImageJPEGRepresentation(image, 100), forKey: "key")
    
    let imageData = UserDefaults.standard.value(forKey: "key") as! Data
    let imageFromData = UIImage(data: imageData)!
    
    检索:

    // 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]];
    }
    
    - (NSString *)documentsPathForFileName:(NSString *)name {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsPath = [paths objectAtIndex:0];
    
        return [documentsPath stringByAppendingPathComponent:name];
    }
    
    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)
    }
    
    func documentsPathForFileName(name: String) -> String {
        let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true);
        let path = paths[0] as String;
        let fullPath = path.stringByAppendingPathComponent(name)
    
        return fullPath
    }
    
    NSUserDefaults.standardUserDefaults().setObject(UIImagePNGRepresentation(chosenImage), forKey: kKeyImage)
    
    if let imageData = NSUserDefaults.standardUserDefaults().objectForKey(kKeyImage),
                let image = UIImage(data: imageData as! NSData){
                // use your image here...
    }
    
    UserDefaults.standard.register(defaults: ["key":UIImageJPEGRepresentation(image, 100)!])
    
    UserDefaults.standard.set(UIImageJPEGRepresentation(image, 100), forKey: "key")
    
    let imageData = UserDefaults.standard.value(forKey: "key") as! Data
    let imageFromData = UIImage(data: imageData)!
    

    对于Swift 3JPG格式

    注册默认图像:

    // 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]];
    }
    
    - (NSString *)documentsPathForFileName:(NSString *)name {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsPath = [paths objectAtIndex:0];
    
        return [documentsPath stringByAppendingPathComponent:name];
    }
    
    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)
    }
    
    func documentsPathForFileName(name: String) -> String {
        let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true);
        let path = paths[0] as String;
        let fullPath = path.stringByAppendingPathComponent(name)
    
        return fullPath
    }
    
    NSUserDefaults.standardUserDefaults().setObject(UIImagePNGRepresentation(chosenImage), forKey: kKeyImage)
    
    if let imageData = NSUserDefaults.standardUserDefaults().objectForKey(kKeyImage),
                let image = UIImage(data: imageData as! NSData){
                // use your image here...
    }
    
    UserDefaults.standard.register(defaults: ["key":UIImageJPEGRepresentation(image, 100)!])
    
    UserDefaults.standard.set(UIImageJPEGRepresentation(image, 100), forKey: "key")
    
    let imageData = UserDefaults.standard.value(forKey: "key") as! Data
    let imageFromData = UIImage(data: imageData)!
    
    保存图像:

    // 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]];
    }
    
    - (NSString *)documentsPathForFileName:(NSString *)name {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsPath = [paths objectAtIndex:0];
    
        return [documentsPath stringByAppendingPathComponent:name];
    }
    
    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)
    }
    
    func documentsPathForFileName(name: String) -> String {
        let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true);
        let path = paths[0] as String;
        let fullPath = path.stringByAppendingPathComponent(name)
    
        return fullPath
    }
    
    NSUserDefaults.standardUserDefaults().setObject(UIImagePNGRepresentation(chosenImage), forKey: kKeyImage)
    
    if let imageData = NSUserDefaults.standardUserDefaults().objectForKey(kKeyImage),
                let image = UIImage(data: imageData as! NSData){
                // use your image here...
    }
    
    UserDefaults.standard.register(defaults: ["key":UIImageJPEGRepresentation(image, 100)!])
    
    UserDefaults.standard.set(UIImageJPEGRepresentation(image, 100), forKey: "key")
    
    let imageData = UserDefaults.standard.value(forKey: "key") as! Data
    let imageFromData = UIImage(data: imageData)!
    
    加载图像:

    // 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]];
    }
    
    - (NSString *)documentsPathForFileName:(NSString *)name {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsPath = [paths objectAtIndex:0];
    
        return [documentsPath stringByAppendingPathComponent:name];
    }
    
    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)
    }
    
    func documentsPathForFileName(name: String) -> String {
        let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true);
        let path = paths[0] as String;
        let fullPath = path.stringByAppendingPathComponent(name)
    
        return fullPath
    }
    
    NSUserDefaults.standardUserDefaults().setObject(UIImagePNGRepresentation(chosenImage), forKey: kKeyImage)
    
    if let imageData = NSUserDefaults.standardUserDefaults().objectForKey(kKeyImage),
                let image = UIImage(data: imageData as! NSData){
                // use your image here...
    }
    
    UserDefaults.standard.register(defaults: ["key":UIImageJPEGRepresentation(image, 100)!])
    
    UserDefaults.standard.set(UIImageJPEGRepresentation(image, 100), forKey: "key")
    
    let imageData = UserDefaults.standard.value(forKey: "key") as! Data
    let imageFromData = UIImage(data: imageData)!
    

    因为这个问题有很高的谷歌搜索指数-这里是@Nikitatake在今天的时代的答案,即Swift 3和4(例外处理)

    注意:这个类只用于将JPG格式的图像读写到文件系统。
    Userdefaults
    内容应该在它之外处理

    writeFile
    接收jpg图像的文件名(扩展名为.jpg)和
    UIImage
    本身,如果能够保存,则返回true;如果无法写入图像,则返回false,此时,您可以将映像存储在
    Userdefaults
    中,这将是您的备份计划,或者只需重试一次。
    readFile
    函数接收图像文件名并返回一个
    UIImage
    ,如果找到传递给该函数的图像名,则返回该图像,否则只返回应用程序资产文件夹中的默认占位符图像(这样可以避免严重崩溃或其他奇怪行为)


    适用于Swift 4

    在这个问题上,我几乎试过了所有的方法,但没有人为我工作。我找到了解决办法。 首先,我为UserDefaults创建了一个扩展,如下所示,然后只调用get和set方法

    extension UserDefaults {
        func imageForKey(key: String) -> UIImage? {
            var image: UIImage?
            if let imageData = data(forKey: key) {
                image = NSKeyedUnarchiver.unarchiveObject(with: imageData) as? UIImage
            }
            return image
        }
        func setImage(image: UIImage?, forKey key: String) {
            var imageData: NSData?
            if let image = image {
                imageData = NSKeyedArchiver.archivedData(withRootObject: image) as NSData?
            }
            set(imageData, forKey: key)
        } 
    }
    
    t