2011-10-05 158 views
0

我有两个views.On我的第一视图,我有一个自定义的button.By点击该按钮另一种观点将与图标创建library.by单击该图标图标将设置为1 view.i有值存储到NSUser defaults.but图标未设置。图像不设置自定义按钮

这里是代码:

视图2:

-(IBAction)btnImage1Clicked:(id)sender{ 

NSString *[email protected]"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

我不知道你为什么在视图2释放'img1'当你不分配它。过度放置并不是一个好习惯。它可能会导致僵尸坠毁。 –

回答

1

我想可能是Maulik的代码工作,但我不认为这是使用setObject:forKey方法的NSString一个正确的方式。

有一个在代码中的基本错误。

您正在将字符串值分配给img1,将其分配给NSUserDefaults,然后释放字符串,最终释放NSUserDefaults中的字符串,因为它未被复制。

没有任何理由释放在view2img1,当你不分配呢?过度放置并不是一个好习惯。它可能会导致僵尸在某个时间点崩溃。

所以就把代码在你view2,如下图所示。即删除[img1 release]声明,它应该很好地工作代码:

-(IBAction)btnImage1Clicked:(id)sender 
{ 

    NSString *[email protected]"NODE - BOOK_a.png"; 
    NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; 

    if (standardUserDefaults) { 

     [standardUserDefaults setValue:img1 forKey:@"image1"]; 
     [standardUserDefaults synchronize]; 
    } 

    [self dismissModalViewControllerAnimated:YES]; 
} 

因此,底线是,你并不需要释放img1当你不分配它。

有关内存管理的更多信息,你可以参考Memory Management Guidelines

希望这有助于你。

1

设置字符串中NSUserDefaults次尝试是。

NSString *valueToSave = @"someValue"; 
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; 

[standardUserDefaults setObject:img1 forKey:@"image1"];