Две записи календаря, перечисленные на iPad — невозможно записать в календарь с помощью EventKit

Приложение My 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;
        }
    }

person Neal    schedule 26.03.2012    source источник
comment
возможный дубликат EKEventStore.calendars возвращает несуществующий объект календаря   -  person poupou    schedule 27.03.2012


Ответы (3)


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

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

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

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

person firecall    schedule 07.05.2012
comment
У меня включен iCloud, но я не использую его для синхронизации календаря, и я вижу эту проблему на своем iPad. - person Neal; 08.05.2012
comment
Я подтвердил большой буквой «А», что локальные календари недоступны при включенном iCloud, и что это сделано намеренно. - person leanne; 09.10.2018

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

Между прочим, вы не одиноки в поисках ответ.

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

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

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

person poupou    schedule 27.03.2012
comment
Попробуйте отладить, чтобы вы повторяли календари на своем iPad, и тогда вы можете это увидеть. Вот когда я это вижу. Я боюсь отфильтровывать календарь (локальный), так как не знаю его назначения. Интересно, представляет ли он просто выбор календаря пользователей по умолчанию в настройках устройства? Придется повозиться с настройками устройства в области календаря и посмотреть, на что это повлияет. - person Neal; 27.03.2012
comment
Я уже пробовал это во время отладки с теми же результатами (т. е. только с одной записью с именем Calendar). Календарь по умолчанию представлен свойством DefaultCalandendarForNewEvents и (для меня) он установлен на Работа, тип CalDav (по умолчанию, его можно изменить с помощью Настройки). Сегодня утром я попробовал еще раз с iPad (с включенной электронной почтой) под управлением iOS 5.1 с теми же результатами. Моя первоначальная догадка заключалась в том, что этот фантомный календарь использовался в автономном режиме (без доступа к iCloud/Caldav), но переключение в режим полета ничего не изменило... - person poupou; 27.03.2012

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

EKCalendar ‹0x1aa6b0> {название = Календарь; тип = Обмен; позволяет изменить = ДА; color = #0E61B9;}, EKCalendar ‹0x1aa790> {title = Calendar; тип = местный; позволяет изменить = ДА; цвет = #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
    }
}
person Matt Erickson    schedule 06.04.2012