iOS9中如何在日歷App中創建一個任意時間之前開始的提醒(二)


大熊貓豬·侯佩原創或翻譯作品.歡迎轉載,轉載請注明出處.
如果覺得寫的不好請多提意見,如果覺得不錯請多多支持點贊.謝謝! hopy ;)


接上一篇,我們來看一下如何根據類型和名稱找到一個特定的日歷源,首先我們寫一個幫助方法:

-(EKSource*)sourceInEventStore:(EKEventStore*)store sourceType:(EKSourceType)type sourceTitle:(NSString*)title{
for (EKSource *source in store.sources) {
if (source.sourceType == type && [source.title caseInsensitiveCompare:title] == NSOrderedSame) {
return source;
}
}
return nil;
}

我們當然可以只通過日歷源的title來查找,不過加上對其類型的檢查可謂是雙保險.我們在上述方法的開頭位置下斷點,在模擬器中運行App,不出意外應該會在該斷點中斷下來,我們在debug console中輸入:

po store.sources

可以看到模擬器中所有日歷源的輸出:

(lldb) po store.sources
<__NSArrayI 0x787939e0>(
EKSource <0x78792770> {UUID = 705E0A9A-1FD0-4B56-B7D9-CA4E268ECF90; type = Local; title = Default; externalID = (null)},
EKSource <0x787939a0> {UUID = F2F63129-2812-48C0-80B8-AFCEFFF9AC84; type = Other; title = Other; externalID = (null)}
)

可以看到日歷數據庫中第一個日歷源的真正名稱為Default,而后面一個名稱為Other.這就印證了我在第一篇中說的,在模擬器中顯示的第一個日歷源的名稱只是一個便於用戶理解的別名.

如果在真機中運行呢?你會發現第一個日歷源的名稱為iCloud.區別是前者是一個本地的源(EKSourceTypeLocal),后者是一個遠程的源.這里多說幾句,遠程的日歷源也有很多種類型,比如:

    EKSourceTypeExchange
EKSourceTypeCalDAV

它們分別表示兩種不同的日歷通訊協議,用來同步客戶端和服務器端上的日歷內容.感興趣的童鞋可以自行度娘谷哥搜尋.

現在我們可以肯定模擬器中的Default源是本地源,而iCloud源是一個CalDAV類型的遠程源.

下面我們就按照上面我們分析過的內容來分別獲取Default和iCloud源:

//獲取iCloud源
EKSource *icloudSource = [self sourceInEventStore:store sourceType:EKSourceTypeCalDAV sourceTitle:@"iCloud"];
//獲取本地Default源
EKSource *localSource = [self sourceInEventStore:store sourceType:EKSourceTypeLocal sourceTitle:@"Default"];

三.獲取日歷源中的指定日歷

現在我們獲取到了一個日歷源,那么怎么獲取其中某一個日歷呢?日歷在EventKit的表示為一個EKCalendar的實例,我們同樣寫一個幫助方法:

-(EKCalendar*)calendarWithTitle:(NSString*)title type:(EKCalendarType)type inSource:(EKSource*)source forEventType:(EKEntityType)eventType{
for (EKCalendar *calendar in [source calendarsForEntityType:eventType]) {
if ([calendar.title caseInsensitiveCompare:title] == NSOrderedSame && calendar.type == type) {
return calendar;
}
}
return nil;
}

上面代碼很簡單,不用我再碎碎念了.


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com