2013-01-11 79 views
5
EKEventStore *eventStore = [[UpdateManager sharedUpdateManager] eventStore]; 

if ([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]) 
{ 
    [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) 
    { 
     if (granted)... 

我想要求用戶有權將事件添加到他的日曆中。在授權後,當我想要例如刪除一個事件(在應用程序關閉並重新打開後的另一個會話中)時,是否需要再次詢問權限還是僅僅是一個想要的時間?requestAccessToEntityType - 一次還是每次?

如果是一次性事物,我可以在第一次午餐時將它放在ViewDidLoad中以「擺脫它」嗎?

+1

這絕對沒有任何**與Xcode做什麼。 – 2013-01-11 12:23:21

回答

16

你只需要調用一次:

BOOL needsToRequestAccessToEventStore = NO; // iOS 5 behavior 
EKAuthorizationStatus authorizationStatus = EKAuthorizationStatusAuthorized; // iOS 5 behavior 
if ([[EKEventStore class] respondsToSelector:@selector(authorizationStatusForEntityType:)]) { 
    authorizationStatus = [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent]; 
    needsToRequestAccessToEventStore = (authorizationStatus == EKAuthorizationStatusNotDetermined); 
} 

if (needsToRequestAccessToEventStore) { 
    [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {    
     if (granted) { 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       // You can use the event store now 
      }); 
     } 
    }]; 
} else if (authorizationStatus == EKAuthorizationStatusAuthorized) { 
    // You can use the event store now 
} else { 
    // Access denied 
} 

你不應該這樣做的第一次發射,雖然。只有在您需要時才請求訪問,並且在用戶決定添加事件之前並非如此。

+0

我需要在iOS 6模擬器上看到提示嗎?因爲現在我沒有和我的隱私在日曆下是空的 – Segev

+0

@Sha這很正常。隱私警報不會顯示在iPhone模擬器中。在實際設備上進行測試。 –

+0

我沒有方便的ios 6設備。爲什麼他們會在模擬器中放置一個隱私部分,內容爲「請求訪問您的日曆的應用程序將顯示在此處」?感覺不對 – Segev

相關問題