首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果EKCalendar设置为不同步提醒,则无法创建本地提醒(提醒)

如果EKCalendar设置为不同步提醒,则无法创建本地提醒(提醒)
EN

Stack Overflow用户
提问于 2013-10-17 15:28:22
回答 1查看 958关注 0票数 3

在这里遇到一个非常奇怪的问题,在我看来,这似乎是EventKit API的一个问题,我只想检查一下,这不是我正在做的事情。

测试用例1:

  • 提示已在应用程序的隐私中启用
  • 该设备有一个iCloud帐户,但设置为不同步提醒
  • 我可以在苹果的“提醒”应用程序中创建一个本地提醒列表
  • 问题-尝试使用类型为EKEntityTypeReminder类型的源创建实体类型EKSourceTypeLocal的新日历失败

测试用例2:

  • 提示已在应用程序的隐私中启用
  • 该设备没有iCloud帐户。
  • 我可以在苹果的“提醒”应用程序中创建一个本地提醒列表
  • 我可以通过EK创建一个本地提醒列表。

测试用例3:

  • 提示已在应用程序的隐私中启用
  • 该设备有一个iCloud帐户,并设置为同步提醒。
  • 我可以在苹果的“提醒”应用程序中创建一个iCloud提醒列表
  • 我可以通过EK创建一个iCloud提醒列表。

我是疯了,还是这是API的一个bug?

干杯!

下面是代码:

代码语言:javascript
复制
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的内容:

代码语言:javascript
复制
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]);
EN

回答 1

Stack Overflow用户

发布于 2016-07-07 02:15:01

对于所有对此仍有问题的人,请检查您使用的EKSourceType是否存在于您的手机中。对于Swift,请尝试使用EKSourceType.Exchange。请注意,我有一个Outlook/Exchange帐户同步到我的手机。

我知道这是非常模糊的,但当我使用EKSourceType.Exchange时,它对我起了作用。(玩它)

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19430924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档