2013-10-12 72 views
1

我正在創建一個將事件添加到默認日曆的應用程序,但我發現了一個問題。這是用來使應用程序訪問日曆代碼:如果requestAccessToEntityType失敗,則不顯示UIAlertView

// create eventStore object. 
EKEventStore *eventStore = [[EKEventStore alloc] init]; 

if([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]) 

{ 
    [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) 
    { 
     if(granted) 
     { 
      // create an instance of event with the help of event-store object. 
      EKEvent *event = [EKEvent eventWithEventStore:eventStore]; 

      // set the title of the event. 
      event.title = @"Event"; 


      event.startDate = [[NSDate date] dateByAddingTimeInterval:86400]; 

      event.endDate = [[NSDate date] dateByAddingTimeInterval:90000]; 

      // set the calendar of the event. - here default calendar 
      [event setCalendar:[eventStore defaultCalendarForNewEvents]]; 

      // store the event using EventStore. 
      NSError *err; 
      [eventStore saveEvent:event span:EKSpanThisEvent error:&err]; 

     } 
     else { 

      UIAlertView *warningAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"No permission to access!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
      [warningAlert show]; 
     } 

    }]; 
} 

我認爲,如果我得到了普遍>隱私和設置訪問日曆爲「否」,每當我點擊,使按鈕在之前列出的動作中,程序應該跳過創建alertView的「else」(創建bool爲false)。但是,當我嘗試這個程序崩潰不讓我做任何事情,如果我按主頁按鈕,然後重新輸入應用程序空alertView將出現(無標題或消息)。

我該如何解決這個問題?我把alertView放在錯誤的地方?

添加信息:此功能是在我每次點擊某個事件時點擊的按鈕。

回答

1

你試過顯示主線程警報..

if (granted) 
{ 
    .... 
} 
else { 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     UIAlertView *warningAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"No permission to access!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [warningAlert show]; 
    }); 
} 

從用戶請求的權限不會在主線程發生。你可以通過訪問主線程來完成你的用戶界面(Alert)。希望它有幫助..

+0

這是非常有益的。謝謝 –

相關問題