2011-10-05 105 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"];