2013-12-19 39 views
0

我有以下代碼使用步進器來設置myLabel的值。 我有它設置爲存儲到NSUserDefaults的值。UIStepper - 設置值從NSUserDefaults

1)我還需要將步進值設置爲與我放入標籤的值相同的值。有人可以建議如何做到這一點嗎? (我已經在代碼中添加了一條評論,我覺得應該是這樣)

2)我還想在加載saveString之前檢查它是否實際設置,如果沒有,請設置默認值。你還可以建議如何實現這一目標?

謝謝。

- (void)viewWillAppear:(BOOL)animated 
{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSString *loadString = [defaults objectForKey:@"saveString"]; 
    self.myLabel.text = loadString; 
// Need to set the stepper value to that in loadString 
} 

- (IBAction)stepChanged:(id)sender { 
    NSString *saveString = [NSString stringWithFormat:@"%d", 
          [[NSNumber numberWithDouble:[(UIStepper *)sender value]] intValue]]; 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:saveString forKey:@"saveString"]; 
    [defaults synchronize]; 
    self.myLabel.text = saveString; 
} 

我已經更新了代碼如下: -

- (void)viewWillAppear:(BOOL)animated 
{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSNumber *loadNumber = [defaults objectForKey:@"saveNumber"]; 
    self.myLabel.text = [NSString stringWithFormat:@"%@",loadNumber]; 
    UIStepper *stepper = [[UIStepper alloc] init]; 
    stepper.value = [NSNumber numberWithDouble:loadNumber]; 
} 

- (IBAction)stepChanged:(id)sender { 
    NSNumber *saveNumber = [NSNumber numberWithDouble:[(UIStepper *)sender value]]; 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:saveNumber forKey:@"saveNumber"]; 
    [defaults synchronize]; 
    self.myLabel.text = [NSString stringWithFormat:@"%@",saveNumber]; 
} 

然而, '線stepper.value = [NSNumber的numberWithDouble:loadNumber];'錯誤'發送'NSNumber * __ strong'到不兼容類型'double''的參數。我認爲步進器只會接受一個double,但我不確定我在做錯什麼設置。需要實現的是: - 1)在NSUserDefaults中爲saveNumber設置一個默認值,直到用戶做出變化時纔會使用它。2)在加載或查看時出現,使用saveNumber來設置值這兩個stepper.value和myLabel 3)確保用步進器更改時,值在myLabel中更新,NSUserDefaults saveNumber也更新。請問?

此外,我剛纔意識到的一點是,在最終的應用程序中,我將在不同的viewController上使用NSUserDefaults savedNumber值的設置。考慮到這一點,你是否也可以讓我知道如何確保savedNumber不僅適用於此viewController,而且還有其他我需要的值?

非常感謝。

+0

stepper.value ='[loadNumber doubleValue];'應該做的伎倆。由於信息保存在本地文件系統中,因此NSUserDefaults也可用於所有其他視圖控制器。就像您現在所做的那樣,只需在其他視圖控制器中獲取您的信息。 – dehlen

+0

@dehlen請看看http://stackoverflow.com/questions/20708074/ios-uistepper-nsuserdefaults-how-to-manage-them-together-and-use-a-double。我已經得到了你現在所說的,但仍然有問題。 – MrNeilM

回答

1

關於問題1: 只是要一個實例變量int stepper;(在你的.h) 然後在viewWillAppear設定這個變量,你此刻做的;並設置

stepper = [defaults integerForKey:@"stepper"]; 

在你IBAction爲就叫

stepper++; 
self.myLabel.text = [NSString stringWithFormat:@"%i",stepper]; 
and save it in your NSUserDefaults. 

關於問題2:NSUserDefaults的提供給註冊某些鍵違約的可能性,看看這個:

NSDictionary *defaults = [NSDictionary dictionaryWithObjectsAndKeys: 
           @"test", @"key", 
           nil]; 
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults]; 
+0

請參閱 - (IBAction)stepChanged:(id)sender設置NSUserDefaults並在更改時更新標籤。 – MrNeilM

+0

請看我編輯的答案 – dehlen

+0

謝謝你。我不完全確定如何使這項工作,並已添加修改我的問題中的代碼。任何意見? – MrNeilM

0

如果NSUserDefaults中沒有設置,objectForKey方法將返回nil,因此您的loadString將是nil。現在

,你可以轉換你從一個字符串保存到一個號碼的價值,像[loadString floatValue];,但可能是更好的辦法是一個NSNumber存入userDefaults正確的值,並重新與stringWithFormat您的標籤文本方法。

+0

謝謝你。我不完全確定如何使這項工作,並已添加修改我的問題中的代碼。任何意見? – MrNeilM

+0

該行應該是stepper.value = [loadNumber doubleValue]; – Adis

+0

請看看http://stackoverflow.com/questions/20708074/ios-uistepper-nsuserdefaults-how-to-manage-them-together-and-use-a-double。我現在已經確定了,但仍然有問題。 – MrNeilM