2016-02-07 80 views
0

在我的應用程序中,我創建了一個EKCalendar。由於日曆可以通過我的應用程序之外的用戶被刪除,我需要檢查,如果該日曆仍然存在,就像這樣:iOS:界面不刷新

-(BOOL)checkForCalendar { 

    NSArray *calendarArray = [self.store calendarsForEntityType:EKEntityTypeEvent]; 


    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSString *calNameToCheckFor = [defaults objectForKey:@"calendarName"]; 

    EKCalendar *cal; 

    for (int x = 0; x < [calendarArray count]; x++) { 

     cal = [calendarArray objectAtIndex:x]; 
     NSString *calTitle = [cal title]; 

     // if the calendar is found, return YES 
     if ([calTitle isEqualToString:calNameToCheckFor]) { 

      return YES; 
     } 
    } 
    return NO; 

} 

我想我的UI更新,如果一個日曆確實被刪除,因爲這樣的:

-(void)initCalendarState { 
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
    if (![self checkForCalendar]){ 
     [self.LoginSwitch setOn:NO animated:NO]; 
     [userDefaults setObject:@"0" forKey:@"SwitchedOn"]; 
    } 
} 

我已經把在應用程序的委託這種方法

- (void)applicationDidBecomeActive:(UIApplication *)application 

事情我觀察:

1)如果我在調試器中一步一步地通過這段代碼,它會在正確的時刻被調用,並按預期執行:在主線程中運行,遵守所有條件等。

2)但是:when它會更新UI,([self.LoginSwitch setOn:NO animated:NO];),沒有任何反應。

3)當我重新運行項目(有效強制退出並重新啓動)時,UI實際上會更新。

我錯過了什麼?

具體的問題是:爲什麼不在應用程序運行時更新我的​​UI?

感謝提前

回答

0

我認爲正在發生的事情,是我在本地日曆所做的更改不是通過icloud的同步系統完全激增。或者類似的東西。不確定。 但是:解決我的問題,我補充

[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(storeChanged:) 
               name:EKEventStoreChangedNotification 
               object:self.store]; 

到我的應用程序。

-(void)storeChanged:(NSNotification *) notification { 

    [self initCalendarState]; 
} 

這完美的作品。