2016-02-07 3 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; 

} 

Я хочу, чтобы мой пользовательский интерфейс для обновления, если календарь действительно удаляются, как таковые:

-(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) Однако: когда он получает обновление пользовательского интерфейса, ([self.LoginSwitch setOn: NO animated: NO];), ничего не происходит.

3) Когда я повторно запустил проект (фактически выйдя из него и перезапустив), пользовательский интерфейс действительно обновляется.

Что мне не хватает?

Конкретный вопрос: почему мой пользовательский интерфейс не обновлен во время работы приложения?

Благодаря вперед

ответ

0

Я думаю, что происходит, является то, что изменения, которые я сделал в моем местном календаре не были полностью пролиферируют через систему синхронизации ICloud. Или что-то в этом роде. Не уверен. Однако: решить мою проблему, я добавил

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

мое приложение.

и

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

    [self initCalendarState]; 
} 

Это работает безупречно.

Смежные вопросы