3
在這裏遇到一個很奇怪的問題,這在我看來是EventKit API的問題,我只是想檢查它沒有我在做什麼。無法創建本地EKCalendar(提醒)如果iCloud設置爲不同步提醒
測試案例1:
- 提醒在隱私啓用應用程序
- 該器件有一個iCloud帳戶,但它的設置不同步提醒
- 我可以創建一個本地提醒列表中的提醒
- ISSUE - 試圖創建EKSourceTypeLocal類型的實體類型EKEntityTypeReminder的新日曆失敗
測試案例2:
- 提醒在隱私啓用應用程序
- 設備沒有iCloud帳戶
- 我可以從「提醒」應用程序創建一個本地提醒列表蘋果
- 我可以通過EK API
維護設備創建一個本地提醒列表t情況3:
- 提醒在隱私啓用應用程序
- 該器件有一個iCloud帳戶,並設置爲同步提醒
- 我可以在「提醒」創建的iCloud提醒列表從蘋果
- 應用程序,我可以創造一個iCloud中通過EK API
我要去催名單瘋了還是這是與API的錯誤嗎?
乾杯!
下面的代碼:
EKCalendar *remindersList = nil;
NSString *remindersListIdent = [[NSUserDefaults standardUserDefaults] objectForKey:kReminderListIdentDefaultsKey];
if(remindersListIdent) {
remindersList = [store calendarWithIdentifier:remindersListIdent];
if(remindersList) {
// has valid reminders list so save reminder and return (don't run rest of function)
[self saveReminder:reminder toCalendar:remindersList withTypeLabel:reminderTypeLabel];
return;
}
}
NSArray *currentCalendars = [store calendarsForEntityType:EKEntityTypeReminder];
for(EKCalendar *cal in currentCalendars) {
if([[cal title] isEqualToString:@"My App Name"]) {
remindersList = cal;
[[NSUserDefaults standardUserDefaults] setObject:[remindersList calendarIdentifier] forKey:kReminderListIdentDefaultsKey];
[[NSUserDefaults standardUserDefaults] synchronize];
[self saveReminder:reminder toCalendar:remindersList withTypeLabel:reminderTypeLabel];
return;
}
}
EKSource *localSource = nil;
for (EKSource *source in store.sources) {
if (source.sourceType == EKSourceTypeCalDAV && [source.title isEqualToString:@"iCloud"]) {
localSource = source;
break;
}
}
if(localSource) {
remindersList = [self newCalendarListInSource:localSource];
}
if(!remindersList) {
for (EKSource *source in store.sources) {
if (source.sourceType == EKSourceTypeLocal) {
localSource = source;
remindersList = [self newCalendarListInSource:localSource];
if(remindersList) {
break;
}
}
}
}
if(!remindersList) {
dispatch_async(dispatch_get_main_queue(), ^{
// show error message
});
}
else {
[[NSUserDefaults standardUserDefaults] setObject:[remindersList calendarIdentifier] forKey:kReminderListIdentDefaultsKey];
[[NSUserDefaults standardUserDefaults] synchronize];
[self saveReminder:reminder toCalendar:remindersList withTypeLabel:reminderTypeLabel];
}
這是newCalendarListInSource的內容:
EKCalendar *remindersList;
remindersList = [EKCalendar calendarForEntityType:EKEntityTypeReminder eventStore:store];
remindersList.source = localSource;
[remindersList setTitle:@"My App Name"];
NSError *listCreateError = nil;
[store saveCalendar:remindersList commit:YES error:&listCreateError];
if(!listCreateError) {
return remindersList;
}
else {
NSLog(@"Failed to create reminders list with error: %@", [listCreateError localizedDescription]);
我有同樣的瘋狂行爲。找不到任何合理的解釋。到目前爲止你有進步嗎? – Oleksandr
感謝您指出這一點。這是非常嚴重的文件記錄,我很樂意找到一個適用於所有情況的解決方案 – Martin
看起來iOS 9已經修復了這個問題?至少,如果啓用了iCloud但禁用了iCloud提醒,我可以創建本地日曆。 – Steven