我有两个视图。在我的第一个视图中,我有一个自定义按钮。通过单击该按钮,另一个视图将使用图标库创建。通过单击该图标,图标将设置为第一个视图。我已存储值为NSUser defaults.but图标未设置。
这是代码:
视图2:
-(IBAction)btnImage1Clicked:(id)sender{
NSString *img1=@"NODE - BOOK_a.png";
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
if (standardUserDefaults) {
[standardUserDefaults setValue:img1 forKey:@"image1"];
[standardUserDefaults synchronize];
}
[img1 release];
[self dismissModalViewControllerAnimated:YES];
}
厂景:
-(void)viewWillAppear:(BOOL)animated{
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
NSString *val = nil;
NSLog(@"val=%@",val);
NSLog(@"user default=%@",[standardUserDefaults valueForKey:@"image1"]);
if (standardUserDefaults)
val = [standardUserDefaults stringForKey:@"image1"];
NSLog(@"image name=%@",val);
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"%@",val]];
stringWithFormat:@"%@",val]] forState:UIControlStateNormal];
[imageButton setBackgroundImage:image forState:UIControlStateNormal];
forState:UIControlStateNormal];
[[NSUserDefaults standardUserDefaults] setValue:@"" forKey:@"image1"];
}
答案 0 :(得分:1)
在NSUserDefaults
中设置字符串试试这个。
NSString *valueToSave = @"someValue";
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
[standardUserDefaults setObject:img1 forKey:@"image1"];
答案 1 :(得分:1)
我认为可能是Maulik的代码正在运行,但我不认为这是对NSString使用setObject:forKey
方法的正确方法。
代码中存在一个基本错误。
您正在将字符串值分配给img1
,将其分配给NSUserDefaults,然后释放字符串,甚至在NSUserDefaults中释放字符串,因为它未被复制。
当您没有分配img1
时,有没有理由在view2
中发布view2
?过度释放不是一个好习惯。由于僵尸在某个时间点可能会导致崩溃。
请将代码放入[img1 release]
,如下所示。即删除-(IBAction)btnImage1Clicked:(id)sender
{
NSString *img1=@"NODE - BOOK_a.png";
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
if (standardUserDefaults) {
[standardUserDefaults setValue:img1 forKey:@"image1"];
[standardUserDefaults synchronize];
}
[self dismissModalViewControllerAnimated:YES];
}
语句,它应该可以正常使用您的代码:
img1
所以最重要的是,当你没有分配它时,你不需要释放{{1}}。
有关内存管理的更多信息,请参阅Memory Management Guidelines
希望这会对你有所帮助。