2013-02-27 104 views
0

所以,大家好,我一直在努力,最後一週纔得到這個工作。UISwitch狀態viewdidload

我有一個應用程序,我需要一個UISwitch打開本地通知。
開關狀態的標準是關閉的,但是當警報開啓時,我需要在加載時更改此設置。 我試過scheduledLocalNotification,我試過一個BOOL,我試圖設置int isOn,當它打開時爲0,當它關閉時,沒有任何東西似乎爲我工作。

的循環,如果我用的是在viewDidLoad中,看起來像這樣:

if (isAlarmOn == 1) { 
     NSLog(@"You have notifications"); 
     [setAlarm setOn:YES]; 

    } 
    else{ 
     NSLog(@"You have no notifications"); 
     [setAlarm setOn:NO]; 
    } 

無論我嘗試使用哪種策略,我似乎並沒有工作,希望我能得到你的球員一些幫助。

更多的代碼:

我setAlarm代碼

- (IBAction)setAlarm:(id)sender { 
    NSArray *notificationArray=[[UIApplication sharedApplication] scheduledLocalNotifications]; 


     if (setAlarm.on) { 
      [alarmStatus setText:@"Alarmen er tændt"]; 
      //Metode til at undersøge om klokken før eller efter officiel solned 
      NSTimeInterval checkTime = [[astronomicalCalendar sunset] timeIntervalSinceDate:[NSDate date]]; 

      NSLog(@"Alarmen er tændt"); 

      if (checkTime >= 0) { 
       [self scheduleNotificationToday]; 
      } 
      else{ 
       [self scheduleNotificationTomorrow]; 
      } 

      NSLog(@"antal alamer %@", notificationArray); 
      isAlarmOn = 1; 

       } 
     else { 
      //Metode til at slette alle notifikationer 
      [[UIApplication sharedApplication] cancelAllLocalNotifications]; 
      NSLog(@"Alarmen er slukket"); 

      NSLog(@"antal alamer %@", notificationArray); 

      isAlarmOn = 0; 
     } 
    } 

我UILocalNotification代碼

- (void)scheduleNotificationToday { 
     Class cls = NSClassFromString(@"UILocalNotification"); 
     if (cls != nil) { 
    //Just some stuff determine which time to alert on. 

       UILocalNotification *notif = [[cls 

alloc] init]; 
      notif.fireDate = [gregorian dateByAddingComponents:traekFraDag toDate:[astronomicalCalendar sunset] options:0]; 
      notif.timeZone = [NSTimeZone defaultTimeZone]; 

      notif.alertBody = @"Nu går solen snart ned"; 
      notif.alertAction = @"Show me"; 
      notif.soundName = @"Waterline.caf"; 
      notif.applicationIconBadgeNumber = 1; 


      [[UIApplication sharedApplication] scheduleLocalNotification:notif]; 
     } 
    } 

請告訴我,如果有你的代碼會的任何其他部分喜歡看

+0

就像測試一樣,將「if(isAlarmOn == 1)」更改爲「if 2> 1」。這將幫助你隔離錯誤。 – melsam 2013-02-27 20:57:59

+0

我不知道從問題什麼是不工作。換句話說,如果你只是說[setAlarm setOn:YES],你可以在viewDidLoad中以編程方式改變你的UISwitch的狀態;並刪除其他的東西?這是收到通知的問題還是什麼? – Fraggle 2013-02-27 21:00:40

+0

我試圖測試2> 1,我能夠以編程方式設置開關。我確實收到了通知,它可以與我的交換機一起工作,但每次應用程序從內存中卸載時,uiswitch都會顯示默認狀態(關閉)。雖然通知仍然有效,所以這只是一個外觀問題。 – 4FunAndProfit 2013-02-27 21:27:01

回答

0

但每一個應用程序是從內存的uiswitch卸載時間表示 默認狀態(關閉)

您沒有存儲任何持續性商店交換機的狀態。這就是爲什麼它總是顯示爲關閉,如果應用程序退出(dealloc被稱爲你的班級)。

如果你想保存開關狀態,即使應用程序不在內存中,那麼你需要將該值保存在某個地方。如果需要,您可以使用NSUserDefaults

+0

事實上,這就是我所做的,它爲我工作! :) – 4FunAndProfit 2013-03-06 18:44:40

1

你需要發佈更多的代碼給我們這些變量是什麼,你的問題其實是更好的背景,但我想你可能會尋找:

[setAlarm setOn:YES animated:YES]; 

[setAlarm setOn:NO animated:YES]; 

..如果setAlarm是你的開關名稱?

+0

我現在試過了動畫:YES,它似乎沒有工作。 我會在我的問題中添加一些我的代碼:) – 4FunAndProfit 2013-02-27 21:24:56

+0

setAlarm是開關名稱 – 4FunAndProfit 2013-02-27 21:34:04

1

確保setAlarm確實指向開關,即它不是零,並且它不指向其他開關。並請爲您的變量選擇其他名稱! ;-)

此外,請確保您沒有-viewWillAppear中的代碼或在-viewDidLoad之後調用的某個其他方法重置交換機的值。實際上,您可能想要延遲設置開關和其他UI元素,直到-viewWillAppear

+0

我沒有其他開關,當我試圖 如果(2> 1)NSLog(@「You have notifications」); [setAlarm setOn:YES]; } 其他{ NSLog(@「You have no notifications」); [setAlarm setOn:NO]; } 它確實改變了UISwitch的狀態,所以它不是零。 我在viewWillAppear中沒有代碼:) – 4FunAndProfit 2013-02-27 21:27:41