0

最近、iOS7 の EKEventStore から EKCalendar オブジェクトを受け取っていないことがわかりました。iOS 6.xx では、同じコード スニペットで問題はありません。defaultCalendarForNewEvents にアクセスしようとすると、単一の EKCalendar オブジェクトを受け取ります (予想どおり)。

エンティティ タイプ EKEntityTypeEvent へのアクセスを要求します。

スニペット:

__block NSMutableArray *calendarsArray = nil;

if ([self.eventsStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]) {
    [self.eventsStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
        if (granted) {
            EKAuthorizationStatus status = [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent];

            if (status == EKAuthorizationStatusAuthorized) {
                calendarsArray = [[NSMutableArray alloc] initWithArray:[self.eventsStore calendarsForEntityType:EKEntityMaskEvent]];
            }
        } else {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error!" message:@"You haven't granted access to calendars. Expected things are not going to happen." delegate:nil cancelButtonTitle:@"I understand" otherButtonTitles:nil];
            [alert show];
        }
    }];
} else {
    calendarsArray = [NSMutableArray arrayWithArray:[self.eventsStore calendarsForEntityType:EKEntityTypeEvent]];
}

calendarsArray に 0 個のオブジェクトを受け取ります。また、Local または CalDAV タイプのすべての EKSource を「実行」して取得しようとしました ([source calendarsForEntityType:] - 同じ空の (0 オブジェクトを含む) セットを取得しました)。

ちなみに、カレンダーへのアクセスは許可されています。

助言がありますか?

4

1 に答える 1

1

簡単な調査の結果、問題はコードにないことがわかりました。問題は iOS 7.0.3 自体にあるようです。

同期されたすべてのカレンダーを iDevice から削除して再度追加すると、すべてのカレンダーがネイティブ カレンダー アプリケーションと私が作成したアプリケーションの両方に表示されました。このアクションを実行した後、コードは、カレンダーにアクセスする方法に依存せずに、EventStore からカレンダーを取得できました (EKSources または EKEventStore 自体を介して)。

于 2013-11-26T10:03:09.240 に答える