存储在NSUSerDefaults中的图像

时间:2013-09-17 05:32:42

标签: ios objective-c uiimageview

我有4个图像视图,如果点击第一个图像视图图像传输到下一个可绘制视图,用户可以使用画板编辑图像。用户可以在该图像上绘制线条或矩形我想将该图像保存到NSUserDefault,当用户返回第一个屏幕时,用原先选择的图像替换原始图像

将图像保存到NSUserDefault我使用了此代码。

-(IBAction)SaveBtn:(UIBUttonSender*)sender
{
    [delegate.imagesDef setObject:UIImagePNGRepresentation(previewImageView.image) forKey:@"first"];

    NSData* imageData = [[NSUserDefaults standardUserDefaults] objectForKey:@"first"];
                 delegate.image = [UIImage imageWithData:imageData];

    NSLog(@"%@",[delegate.image description]);
    NSLog(@"%@",imageData);
    [delegate.imagesDef synchronize];
}

此代码可以正常保存图像。我记录它,但当我前一个控制器图像没有被替换

我使用此代码设置新编辑的图像。

if([delegate.imagesDef objectForKey:@"first"])
    {

        NSData* imageData = [[NSUserDefaults standardUserDefaults] objectForKey:@"first"];
        delegate.image = [UIImage imageWithData:imageData];

        NSLog(@"%@",[delegate.image description]);
        NSLog(@"%@",imageData);

        NSLog(@"%@",delegate.image);

        FirstImageView.image=delegate.image;    
    }

图片没有改变我怎么解决这个问题。

请帮我解决这个问题。

提前感谢。

2 个答案:

答案 0 :(得分:5)

您不应将UIImage存储到NSUserDefaultsNSUserDefaults适用于小块数据,但不适用于整个图像。 只需将映像写入磁盘(进入文档目录)并将路径保存到NSUserDefaults。

<强>装载

NSString *pathToFile;
UIImage *image;
NSData *imageData = UIImagePNGRepresentation(image);
[imageData writeToFile:pathToFile atomically:YES];
[[NSUserDefaults standardUserDefaults] setObject:pathToFile forKey:@"image"];

<强>恢复

NSString *pathToFile = [[NSUserDefaults standardUserDefaults] objectForKey:@"image"];
NSData *imageData = [NSData dataWithContentsOfFile:pathToFile];
UIImage *image = [UIImage imageWithData:imageData];

但是为什么不直接使用属性在ViewControllers之间传递UIImage对象?

答案 1 :(得分:0)

首先不推荐使用NSUserDefault

很少有替代方案:

1)您可以将此图像分配给firstViewControllers属性,以便稍后在secondViewController

中声明其对象时可以访问它

2)您可以将NSNotification发送给firstViewController,您可以将图片从firstViewController发送到secondViewController

希望这会对您有所帮助。