【问题标题】:Images Stored in NSUSer Default图像存储在 NSUSer 默认
【发布时间】:2013-09-21 10:12:18
【问题描述】:

我有一个 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;    
    }

图像没有改变我该如何解决这个问题。

请帮我解决这个问题。

提前致谢。

【问题讨论】:

  • 您应该使用核心数据或 sqlite 数据库,因为 userdeafaults 用于存储小变量而不是大类型的值。
  • 您宁愿存储图像的链接(在数据库或 NSUserDefaults 中,取决于 1. 多少和 2. 它真的是用户默认设置吗?)并将图像保存为文件。

标签: ios objective-c uiimageview


【解决方案1】:

您不应将UIImage 存储到NSUserDefaults 中。 NSUserDefaults 适用于小块数据,而不是整个图像。 只需将图像写入磁盘(写入文档目录)并将路径保存到 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];

但是你为什么不只是使用属性在你的 ViewController 之间传递 UIImage 对象本身呢?

【讨论】:

  • 但请注意,文档的完整路径会随着应用程序的每次更新而变化(应用程序目录的路径中有一个随机生成的组件)。最好保存相对于 Documents 的路径。
  • 但是您始终可以获得文档目录的路径。那里的内容保持不变。
【解决方案2】:

首先不推荐使用NSUserDefault这个东西。

几个选择:

1) 您可以将此图像分配给firstViewControllers 属性,以便以后如果您在secondViewController 中声明了它的对象,则可以访问它

2) 您可以将NSNotification 发送到firstViewController 认为您可以将图像从secondViewController 发送到firstViewController

希望这会对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    相关资源
    最近更新 更多