2012-08-14 98 views
-6

我正在使用NSUserDefaults在另一個視圖控制器上保存一個整數,以便當這個按鈕被按下時,我知道要使用哪個圖像。出於某種原因,模擬器只使用image1,而我的手機只使用image2。我能做什麼?NSUserDefaults在iPhone和模擬器上的工作方式不同

if ([[NSUserDefaults standardUserDefaults] integerForKey:@"key"] == 1){ 

    leftStill = [UIImage imageNamed:@"image1.png"]; 

} 

if ([[NSUserDefaults standardUserDefaults] integerForKey:@"key"] == 2) { 

    leftStill = [UIImage imageNamed:@"image2.png"]; 

} 

[imageView setImage:leftStill]; 
+0

您的代碼告訴您,在模擬器上,密鑰的值爲1,而設備上的值爲2。你可能在你的代碼中有一個錯誤,你在設置這些鍵,但是你沒有發佈,所以我們怎麼說? – idz 2012-08-14 23:48:52

+0

當我使用NSLog檢查時,沒有整數正確出來,它只有圖像 – 2012-08-14 23:50:12

+0

這沒有任何意義。其他事情正在發生。例如「image1.png」和「image2.png」在某種程度上不是您認爲的那樣。你可以通過在分配給'leftStill'之前把'NSLog'加以驗證。 – idz 2012-08-14 23:58:48

回答

1

您是否在設置NSUserDefaults中的值後調用- (BOOL)synchronize;

+0

不知道我到底做了什麼? – 2012-08-15 00:10:57

+3

閱讀有關NSUerDefaults的文檔。習慣於閱讀它們,使其成爲第二天性。你會在那裏找到你的答案。 – Jim 2012-08-15 00:24:23

0

您是否在此代碼塊之前以零/未分配的leftImage和imageView開頭?

由於您正在測試一個整數值,我不知道下面的代碼可能不適合您的工作,可能會避免您的代碼當前正在執行的值的兩個讀數,這可能是導致的問題,而且還使用中介持有人的leftImage本身:

switch([[NSUserDefaults standardUserDefaults] integerForKey:@"key"]) { 
    case 1: 
    [imageView setImage:[UIImage imageNamed:@"image1.png"]; 
    break; 
    case 2: 
    [imageView setImage:[UIImage imageNamed:@"image2.png"]; 
    break; 
    default: 
    break; 
} 
0

當您存儲在NSUserDefaults的價值你會做類似如下:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setInteger:1 forKey:@"key"]; 
[defaults synchronize]; 

的同步並自行定期發生但你沒有瓜爾豆當它會發生時。所以我通常會在任何時候爲NSUserDefaults中的某個鍵設置一個值的同步。

您可能還想考慮一些更適合您嘗試完成的任務的事情,例如使用prepareForSegue。

相關問題