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

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

自分のカレンダーに予定を追加する権限をユーザーに求めています。それが許可された後、私はイベントを削除する(アプリケーションが終了して再オープンした後の別のセッションで)、またはほんの欲しい時間のものにしたい場合に再び許可を求める必要がありますか?requestAccessToEntityType - 1回または毎回?

1回限りの場合は、最初のランチに「ViewDidLoad」を入れて「取り除く」ことができますか?

+1

これは、Xcodeとは全く関係ありません**。 –

答えて

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

@沙それは正常です。プライバシー警告はiPhoneシミュレータには表示されません。実際のデバイスでテストする。 –

+0

私は、便利なios 6デバイスを持っていません。なぜ彼らはシミュレータに「あなたのカレンダーへのアクセスを要求したアプリケーションがここに表示される」というプライバシーセクションを置くのでしょうか?間違っていると感じる – Segev

関連する問題