正如Dave Batton所說,NSUserDefaults是默認應用程序的新發布。如果我正確地理解了你的問題,在我看來,你正在覆蓋firstSliderValueChange中的默認值。這就是爲什麼會發生這種情況:
滑塊從我上次運行應用程序時最後一次設置的位置開始。
要麼分別存儲您的默認值和應用內值,要麼在視圖之間傳遞它們。
編輯: 您在下面的評論中提到的代碼沒有通過值。它堅持價值觀。
問題:假設您最初設置的滑塊值默認爲0.當您第一次運行應用程序時,您會看到滑塊爲0.現在將滑塊移動到5,然後此方法爲所謂:
- (IBAction)firstSliderValueChange:(id)sender {
[[NSUserDefaults standardUserDefaults] setFloat:[_firstSlider value] forKey:@"firstSliderValue"];
}
現在的默認值不再是0.這是5和應用程序啓動之間的持續存在,因爲你正在使用NSUserDefaults的。
解決方案:將動態滑塊值保存在其他位置 - 不在NSUserDefaults中。既然你有多個視圖控制器,一個辦法是這樣的:
//viewController.m
@interface
@property (strong, nonatomic) IBOutlet UISlider *mySlider;
@end
-(void)prepareForSegue: (UIStoryboardSegue *)segue sender:(id)sender {
if([segue.identifier isEqualToString: @"segueIdentifer"]) {
otherViewController *ovc = (otherViewController *)segue.destinationViewController;
ovc.dynamicSliderValue = self.mySlider.value;
}
}
和:
//otherViewController.h
@interface
@property(assign) CGFloat dynamicSliderValue;
@end
現在,每當你切換回你的第一個視圖控制器的視圖,只需訪問該屬性,並更新滑塊因此。 注 - 我相信還有很多其他方法可以做到這一點!
這是沒有意義的。滑塊如何同時具有其默認值和其保存的值? –
爲了澄清,我想在運行應用程序的開始時初始化一個「默認值」,所以滑塊總是以「0」開始,但在切換視圖之後也保留它們的值。上面的代碼完成了後面的問題,但現在我不知道如何初始化應用第一次打開時的值。 – PlateReverb
我的代碼基於這個問題的解決方案:http://stackoverflow.com/questions/24170781/maintaining-slider-position-in-xcode-when-switching-views – PlateReverb