5
EKEventStore *eventStore = [[UpdateManager sharedUpdateManager] eventStore];

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

カレンダーにイベントを追加する許可をユーザーに求めたいと思います。許可された後、たとえばイベントを削除したい場合(アプリを閉じて再度開いた後の別のセッションで)、もう一度許可を求める必要がありますか、それとも単に時間の問題ですか?

それが1回限りの場合、「それを取り除く」ためだけに、最初の昼食時にViewDidLoadに入れることはできますか?

4

1 に答える 1

17

一度だけ呼び出す必要があります。

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
}

ただし、最初の起動時にそれを行うべきではありません。必要なときにのみアクセスを要求します。ユーザーがイベントを追加することを決定するまでは、そうではありません。

于 2013-01-11T12:35:43.440 に答える