Две записи «Календарь» перечислены на iPad - невозможно записать в календарь с помощью EventKit - PullRequest
1 голос
/ 26 марта 2012

Мое приложение iOS интегрируется с календарем устройства.На моем iPad, когда я просматриваю приложение календаря и нажимаю кнопку «Календари» в левом верхнем углу, чтобы выбрать, какие календари нужно показать, я вижу одну запись с именем «Календарь».В моем приложении, когда я перебираю доступные календари в соответствии с кодом ниже, «Календарь» указывается дважды.Одним из них является CalDAV для типа, другой является локальным.Я не могу создать записи календаря в одном из них, я считаю, что «Локальный», не знаю почему.

Почему я вижу «Календарь» в списке дважды, когда я НЕ вижу его в приложении 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;
        }
    }

Ответы [ 3 ]

1 голос
/ 07 мая 2012

Если у вас включен iCloud, вы не увидите локальные календари.

Я считаю, что это сделано для пользователя. Когда вы включаете iCloud, он предлагает объединить ваши локальные календари в iCloud. После включения iCloud iOS будет скрывать локальные календари, даже те, которые вы создаете программно, от пользователя, чтобы они не создавали события в локальном календаре, а затем удивляться, почему они рутинно синхронизируются с iCloud.

Проверьте http://www.raywenderlich.com на приличный учебник по EKVentKit в их книге.

Но ни одна книга или учебник, которые я нашел, не говорит о создании календарей в iCloud или локально, а также о проблемах, возникающих при включении и выключении iCloud ...

0 голосов
/ 06 апреля 2012

Я могу подтвердить, что я тоже это вижу. Детали отладочной печати:

EKCalendar <0x1aa6b0> {title = Calendar; тип = обмен; allowModify = YES; color = # 0E61B9;}, EKCalendar <0x1aa790> {title = Calendar; тип = местный; allowModify = YES; color = # 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
    }
}
0 голосов
/ 27 марта 2012

Почему я вижу "Календарь" в списке дважды, когда я НЕ вижу его в приложении iCal дважды?

FWIW вы не одиноки ищетедля ответа .

Как его увидеть дважды ?Я не могу продублировать это, используя мои собственные устройства (под управлением iOS 5.1), даже те, на которых не настроен ни один адрес электронной почты (или календарь).Я получаю (в iCal) календари iCloud (разделенные на Домашний и Рабочий ) и Другие ( Дни рождения ) календари.Может быть, это из-за того, что у меня включен iCloud?

Используя какой-то быстрый код C #, оба Home и Work равны CalDav (только для устройства), Дни рождения - это Birthday (как на устройстве, так и на симуляторе), а другое - Календарь , которое Local (на устройстве и на симуляторе), но не , видимое в iCal.

Таким образом, есть окончательный дополнительный , недокументированный (пока) Local календарь.

...