2012-05-10 2 views
7

Я пишу приложение, которое занимается календарем. В приложении я показываю список всех доступных календарей для включения или отключения пользователя. Я не с использованием рамки EventKitUI для целей моего собственного дизайна и пользовательского интерфейса.Как решить, можно ли скрывать календарь «EKCalendar» по умолчанию?

Я получаю аккуратный список календарей, опросив calendars объект EKEventStore. На моем устройстве, однако, есть объект EKCalendar в этом списке, который является не, указанным EKEventKitUI. Это описание объекта в отладчике:

EKCalendar <0xcea6b60> {title = Agenda; type = Local; allowsModify = YES; color = #711A76;} 

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

От взгляда на the properties of EKCalendar Я не могу определить, какой календарь мне нужно «скрыть». Есть свойство type, которое является «локальным» для этого календаря по умолчанию, но если кто-то не использует iCloud, я думаю, что все календари имеют локальный тип. subscription не так ли, равно allowsContentModifications. Я видел examples of people hiding the default calendar based on it's title, но, как вы можете видеть, название локализовано и, следовательно, очень непрактично, это просто неправильно.

Каков трюк, чтобы определить, какой календарь является календарем по умолчанию и следует ли его скрывать или нет, чтобы сопоставить список календарей, отображаемых вашим обычным приложением iCal/Calendar?

EDIT: Хотя вопрос был отмечен как получен ответ, ответ содержит большой «нет, ты не можешь». Я решил эту проблему для своих пользователей, добавив переключатель панели настроек в «Скрыть локальные календари», но это очень и очень нелегкое решение.

ответ

5

Чтобы ответить на ваш вопрос жирным шрифтом, нет волшебного свойства, которое вы можете использовать, чтобы определить, должен ли календарь скрываться или отображаться.

Однако, если ваша теория правильна в отношении приложения «Календарь», скрывающего «местный» календарь, если доступны другие типы календарей (iCloud/MobileMe, Exchange, CalDAV и т. Д.), Тогда вы можете отразить свою логику в своем коде, используя EKSource массив в EKEventStore

EKEventStore *store = [[EKEventStore alloc] init]; 

for (EKSource *source in store.sources) 
    if (source.sourceType == EKSourceTypeExchange || source.sourceType == EKSourceTypeCalDAV) 
    { 
     //Your custom logic here to determine if the local cal should be hidden. 
     break; 
    } 

Вы можете найти полный список EKSourceType констант здесь: http://developer.apple.com/library/ios/#documentation/EventKit/Reference/EKSourceClassRef/Reference/Reference.html

+0

Да, это то, что я делаю сейчас, но это чувствует себя так тоже неправильно! – epologee