将图像保存在 NSUserDefault 并进入其他 ViewController
Posted
技术标签:
【中文标题】将图像保存在 NSUserDefault 并进入其他 ViewController【英文标题】:Save image in NSUserDefault and get in other ViewController 【发布时间】:2013-03-19 07:03:59 【问题描述】:我将图像保存在我的第一个视图控制器中的 nsuserdefaulf 中,我从 imagepicker 获取图像
[[NSUserDefaults standardUserDefaults] setObject:UIImagePNGRepresentation(image) forKey:@"image"];
我正在像这样在下一个 viewController 中获取此图像
NSData* imageData = [[NSUserDefaults standardUserDefaults] objectForKey:@"image"];
UIImage* image = [UIImage imageWithData:imageData];
但是当我传递此图像以供使用时,它给了我错误,但是当我使用这样的图像时,它会起作用。 ( bg.png 保存在项目中)
UIImage *image = [UIImage imageNamed:@"bg.png"];
我的代码有什么问题。 ?
【问题讨论】:
同步了吗??如果不这样做 [[NSUserDefaults standardUserDefaults] 同步]; 我建议你不要使用 NSUserDefaults。 我应该用什么来存储来自 imagepicker 的图像并在另一个视图控制器中使用它? NSUserDefaults 用于持久化用户设置,而不是在程序的各个部分之间传递瞬态对象。只需在一个对象上使用一个属性,这两者都有一个引用。 【参考方案1】:Zohaib,您的代码中存在转换问题。 首先在“NSDATA”中转换你的图像,然后添加到“NSUserDefaults”
NSData *data = [NSData dataWithData:UIImageJPEGRepresentation(image);
然后你就可以取回数据了。
【讨论】:
谢谢它的工作,有两个问题1)你告诉我先在NSData中转换图像。 2)我的图像尺寸非常大,所以我不得不减小它的尺寸,它现在可以工作了。 这个答案没有意义。 UIImageJPEGRepresentation 返回一个 NSData 的实例。与 UIImageJPEGRepresentation 相比,对 dataWithData 的额外调用不会将图像“转换”为 NSData。 @AaronGolden 我使用了 UIImagePNGRepresentation。我尝试过使用 dataWithData,但即使我减小了图像大小,它也无法正常工作。但是当我尝试 dataWithdata 时它会起作用。【参考方案2】:当你从选择器中选择图像时会调用这个方法
所以,把UIImage *imgGotFromPicker;
声明在.h 文件中
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
imgGotFromPicker = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
推送时将此图像发送到其他视图控制器。
在第二个视图控制器中:
@property(nonatomic, strong) UIImage *imgfromView; in .h
@synthesize imgfromView = _imgfromView; in .m
【讨论】:
【参考方案3】:要保存图像并在任何其他视图中获取它,您可以使用此方法:
保存者:
[[NSUserDefaults standardUserDefaults] setObject:UIImagePNGRepresentation(image);
检索方式:
NSData* imageData = [[NSUserDefaults standardUserDefaults] objectForKey:key];
UIImage* image = [UIImage imageWithData:imageData];
【讨论】:
【参考方案4】:如果您的应用中有此图像,您是否应该保存图像名称? 商店:
[[NSUserDefaults standardUserDefaults] setObject:@"bg.png"forKey:@"image"];
然后在其他视图中使用此代码
阅读
UIImage *image = [UIImage imageNamed:[myUserDefaults valueForKey: @"image"]];
【讨论】:
我不想保存我在应用程序中的图像。我可以在我的项目中的任何地方阅读它。我想保存从 imagepicker 获取的图像并保存它,然后在另一个视图控制器中使用它【参考方案5】:您将 NSData 直接保存到 NSUserDefaults 中。这不是执行此操作的正确过程。您需要使用 NSKeyedArchiver 和 NSKeyedUnarchiver 从 NSUserDefaults 保存和检索数据。所以请试试这个:
NSKeyedArchiver and NSKeyedUnarchiver
此链接将帮助您保存和检索数据。您还需要实现这两种方法:
-(void)encodeWithCoder:(NSCoder *)encoder
-(id)initWithCoder:(NSCoder *)decoder
return self;
【讨论】:
以上是关于将图像保存在 NSUserDefault 并进入其他 ViewController的主要内容,如果未能解决你的问题,请参考以下文章
如果 Swift 中存在 NSUserDefault,则尝试更新 CLLocation
如何在 appdelegate 中使用 applicationDidEnterBackground 保存 NSUserDefault