2016-04-04 50 views
0

我知道這已被問過,但我還沒有找到解決方案。我試圖保存UISwitch狀態,以便無論我輸入哪個VC,該開關狀態仍處於活動狀態。但是,任何時候我離開VC開關時,它都會關閉。目前,這是我使用保存開關狀態代碼:保存UISwitch狀態 - 目標C

- (IBAction)tvpSwitch:(UISwitch *)sender { 
    if (sender.isOn) { 
    [[NSUserDefaults standardUserDefaults]setObject:@"on" forKey:@"tvpSwitch"]; 
    [[NSUserDefaults standardUserDefaults]synchronize]; 


} 
else { 
    [[NSUserDefaults standardUserDefaults]setObject:@"off" forKey:@"tvpSwitch"]; 
    [[NSUserDefaults standardUserDefaults]synchronize]; 
}} 

我然後把這是任何VC viewWillAppear中:

-(void)viewWillAppear:(BOOL)animated 
{ 
if ([[[NSUserDefaults standardUserDefaults]valueForKey:@"tvpSwitch"]isEqualToString:@"on"]) 
{ 
     (sender.isOn=YES); 
} 
else 
{ 
     (sender.isOn=NO); 
}} 

這也標誌在viewWillAppear中的方法,上面寫着:「使用未標識的標識符'發件人'。「我通常嘗試使用參考指南,但我很難確定哪裏出了問題。任何幫助將是偉大的!謝謝!

+1

你是如何創建'UISwitch'?因爲你的'發件人'在哪裏,你應該參考開關(例如,self.nameOfTheSwitch) –

回答

0

就像你有一個IBAction那裏,我想你創建了UISwitchInterface Builder。如果是這種情況,請從UISwitch創建一個IBOutlet,然後始終參考它。

0

在第一個代碼片段sender是在IBAction方法中傳遞的參數,該方法是對UISwitch的引用。

在其他視圖控制器中,您需要對UISwitch進行一些參考,但是如果您只想檢查該狀態而無法在UI中更改它,請從NSUserDefaults中獲取並使用它。

順便說一句,有NSUserDefaults指定的方法來保存BOOL類型。

- (IBAction)tvpSwitch:(UISwitch *)sender { 
    [[NSUserDefaults standardUserDefaults] setBool:sender.isOn forKey:@"tvpSwitch"]; 
} 

BOOL switchState; 

-(void)viewWillAppear:(BOOL)animated 
{ 
    switchState = [[NSUserDefaults standardUserDefaults] boolForKey:@"tvpSwitch"]; 
    // do something with switchState 
} 
+0

我試過你的代碼在某種程度上它的工作方式是如何我想要的。我剩下的問題是,它只會將它讀爲處於開啓狀態。目標是當狀態發生變化時,它會保存到用戶的默認值,然後我可以記住這個狀態。我嘗試了一些if語句與上面的代碼,但還沒有找到解決方案。你有這個想法嗎?如果我也誤解了你的回答,我很抱歉。 –