我有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;
}
图片没有改变我怎么解决这个问题。
请帮我解决这个问题。
提前感谢。
答案 0 :(得分:5)
您不应将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];
但是为什么不直接使用属性在ViewControllers之间传递UIImage对象?
答案 1 :(得分:0)
首先不推荐使用NSUserDefault
。
很少有替代方案:
1)您可以将此图像分配给firstViewControllers
属性,以便稍后在secondViewController
2)您可以将NSNotification
发送给firstViewController,您可以将图片从firstViewController
发送到secondViewController
希望这会对您有所帮助。