簡體   English   中英

如何修復 EKErrorDomain Code=1“未設置日歷

[英]How to fix EKErrorDomain Code=1 "No calendar has been set

我想為 iPhone 日歷創建一個日歷條目,我嘗試了以下代碼

        EKEventStore *eventStore = [[EKEventStore alloc] init];
        EKEvent *event  = [EKEvent eventWithEventStore:eventStore];
        event.title     = self.selectedPost.postTitle;
        event.notes     = self.selectedPost.postContent;
        event.startDate =  self.selectedPost.startDate;
        event.endDate   =  self.selectedPost.endDate;

        EKCalendar *targetCalendar = nil;
        targetCalendar = [eventStore defaultCalendarForNewEvents];
        NSLog(@"%@",targetCalendar);
        [event setCalendar:targetCalendar];
        NSError *err;
        [eventStore saveEvent:event span:EKSpanThisEvent error:&err];
        UIAlertView *alert = nil;
        NSLog(@"err %@",err);
        if (err) {
            alert = [[UIAlertView alloc] initWithTitle:@"Error" message:[err localizedDescription] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
        }
        else{
            alert = [[UIAlertView alloc] initWithTitle:@"Success" message:@"Added to calender" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
        }

        [alert show];

但結果是

2013-01-15 22:31:34.682 Project[40863:907] defaultCalendarForNewEvents failed: Error Domain=EKCADErrorDomain Code=1013 "The operation couldn’t be completed. (EKCADErrorDomain error 1013.)"
2013-01-15 22:31:34.683 Project[40863:907] (null)
2013-01-15 22:31:34.690 Project[40863:907] err Error Domain=EKErrorDomain Code=1 "No calendar has been set." UserInfo=0x1d535ba0 {NSLocalizedDescription=No calendar has been set.}

我知道這是因為

[eventStore defaultCalendarForNewEvents];

返回空值。 我試過 [eventStore calendarWithIdentifier:event.calendarItemIdentifier]; 和其他一些代碼,但結果相同如何解決這個問題 任何想法

如果這是在 iOS 6.0 或更高版本上,您必須首先請求訪問用戶的日歷,然后 EventKit 將使用方法-[EKEventStore requestAccessToEntityType:completion:]將它們交給您

查看日歷和提醒編程指南中給出的示例

為了不浪費您的時間,請確保您正在使用-[EKEventStore requestAccessToEntityType:completion:] 中的位掩碼

像這樣

EKEventStore *eventStore = [[EKEventStore alloc] init];
[eventStore requestAccessToEntityType:EKEntityMaskEvent completion:^(BOOL granted, NSError *error) {
    // ...
}];

我通過確保標題與我正在創建的標題不同來修復它,例如我在幾個晚上dance ,所以有一個晚上我會Dance ,另一個晚上會在開始時有一段.Dance .

添加這些行

if(eventStore.defaultCalendarForNewEvents==nil)
*eventStore = [[EKEventStore alloc] init];

第二行僅在您授予訪問權限時第一次執行

您的代碼應如下所示

    EKEventStore *eventStore = [[EKEventStore alloc] init];
    EKEvent *event  = [EKEvent eventWithEventStore:eventStore];
    event.title     = self.selectedPost.postTitle;
    event.notes     = self.selectedPost.postContent;
    event.startDate =  self.selectedPost.startDate;
    event.endDate   =  self.selectedPost.endDate;

    EKCalendar *targetCalendar = nil;
   if(eventStore.defaultCalendarForNewEvents==nil)
      *eventStore = [[EKEventStore alloc] init];
    targetCalendar = [eventStore defaultCalendarForNewEvents];
    NSLog(@"%@",targetCalendar);
    [event setCalendar:targetCalendar];
    NSError *err;
    [eventStore saveEvent:event span:EKSpanThisEvent error:&err];
    UIAlertView *alert = nil;
    NSLog(@"err %@",err);
    if (err) {
        alert = [[UIAlertView alloc] initWithTitle:@"Error" message:[err localizedDescription] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
    }
    else{
        alert = [[UIAlertView alloc] initWithTitle:@"Success" message:@"Added to calender" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
    }

    [alert show];

這對我有用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM