未在自定义按钮上设置图像

时间:2011-10-05 04:27:21

标签: iphone xcode

我有两个视图。在我的第一个视图中,我有一个自定义按钮。通过单击该按钮,另一个视图将使用图标库创建。通过单击该图标,图标将设置为第一个视图。我已存储值为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"];

}

2 个答案:

答案 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

希望这会对你有所帮助。