【问题标题】:Two "Calendar" entries listed on iPad - can't write to calendar using EventKitiPad 上列出的两个“日历”条目 - 无法使用 EventKit 写入日历
【发布时间】:2012-03-26 17:52:04
【问题描述】:

我的 iOS 应用与设备的日历集成。在我的 iPad 上,当我查看日历应用程序并点击左上角的日历按钮以选择要显示的日历时,我看到一个名为“日历”的条目。在我的应用程序中,当我根据“日历”下方的代码循环浏览可用日历时,列出了两次。一个是 CalDAV 的类型,另一个是 Local。我无法在其中一个中创建日历条目,我相信“本地”条目,不知道为什么。

为什么我在 iCal 应用程序中没有看到两次列出“日历”?

        public static List<string> Calendars
    {
        get
        {
            var calendars = new List<string>();

            var ekCalendars = EventStore.Calendars;
            if (ekCalendars != null && ekCalendars.Length > 0)
            {
                foreach (EKCalendar cal in ekCalendars)
                {
                    if (cal.AllowsContentModifications)
                        calendars.Add(cal.Title);
                }
                calendars.Sort();
            }
            return calendars;
        }
    }

【问题讨论】:

标签: ios ios5 xamarin.ios eventkit


【解决方案1】:

如果您启用了 iCloud,您将看不到本地日历。

我相信这是为用户设计的。当您打开 iCloud 时,它会提供将您的本地日历合并到 iCloud 中。启用 iCloud 后,iOS 将对用户隐藏本地日历,即使是您以编程方式创建的日历,这样他们就不会在本地日历中创建事件,然后想知道为什么他们会咆哮与 iCloud 同步。

查看http://www.raywenderlich.com,在他们的书中找到一个不错的 EKVentKit 教程。

但是我发现没有任何书籍或教程能够明智地谈论在 iCloud 或本地创建日历以及打开和关闭 iCloud 时引起的问题...

【讨论】:

  • 我启用了 iCloud,但没有将其用于日历同步,我在 iPad 上看到了这个问题。
  • 我已经用大“A”确认本地日历在 iCloud 开启时不可用,这是设计使然。
【解决方案2】:

为什么我在 iCal 应用程序中没有看到两次列出“日历”?

FWIW 你在not alone 寻找answer

至于看到它两次?我无法使用我自己的设备(运行 iOS 5.1)复制它,即使是没有配置任何电子邮件地址(或日历)的设备。我(在 iCal 中)得到的是 iCloud(分为 HomeWork)和其他(生日)日历。也许那是因为我启用了 iCloud?

使用一些 quick-n-hackish C# 代码,HomeWork 都是 CalDav(仅限设备),Birthdays 是 @987654324 @(设备和模拟器)和另一个,日历,它是Local(在设备和模拟器上),但在 iCal 中可见。

所以肯定有一个额外的,没有记录(到目前为止)Local 日历。

【讨论】:

  • 尝试调试,以便您在 iPad 上迭代日历,然后您可能会看到它。那是我看到它的时候。我害怕过滤掉日历(本地),因为我不知道它的目的。我想知道它是否仅代表用户在设备设置中的默认日历选择?我必须在日历区域修改设备的设置,看看有什么效果。
  • 我已经在使用 same 结果(即只有一个以 Calendar 命名的条目进行调试时尝试过此操作)。 default 日历由 DefaultCalandendarForNewEvents 属性表示,并且(对我而言)它设置在 Work 上,输入 CalDav(默认值,应该可以使用 进行修改设置)。今天早上我还用运行 iOS 5.1 的 iPad(已启用电子邮件)再次尝试,结果 相同。我最初的猜测是这个 ghost 日历在离线时使用(没有 iCloud/Caldav 访问权限),但切换到飞行模式并没有改变任何东西......
【解决方案3】:

我可以确认我也看到了这一点。调试打印的详细信息:

EKCalendar {title = 日历;类型=交换;允许修改=是;颜色 = #0E61B9;}, EKCalendar {title = 日历;类型=本地;允许修改=是;颜色 = #F64F00;},

更多信息: 我有一个应用程序,其功能类似于传统的日历应用程序,允许您选择一个日历,然后显示该日历的条目。从我的调试和使用我的应用程序来看,两个“日历”应用程序中都会发生相同的事件。 “重复”日历在日历应用程序中不可见。当我将 GMAIL 日历添加到我的 iPhone 以在我的应用程序中测试多个日历时,副本也出现了。 “重复”日历不会出现在模拟器中。我对以前的 IOS 版本进行了广泛的多日历测试,但以前从未见过这种情况……它是 IOS 5.1 的新功能吗?

我搜索了 IOS 开发板,只有另一个发布了相同的问题。我回复了,我会在这里告诉你我发现了什么。

如果你有兴趣...这里是过滤掉它的代码...

EKEventStore *eventStore = [[EKEventStore alloc] init];
for (EKCalendar *cal in eventStore.calendars) {
    if (cal.type != EKCalendarTypeLocal) {
         // do something
    }
}

【讨论】:

    猜你喜欢
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多