2011-05-16 110 views
4

我在我的應用程序中使用了EventKit,並且想要查明日曆屬於哪個帳戶。檢索EKCalendar的帳戶信息

iPhone日曆應用程序顯示按帳戶分組的所有日曆,例如「[email protected]」或「Gmail myname」的帳戶名稱。我可以從哪裏獲得這些帳戶名稱?

我可以從EKEventStore獲得EKCalendar的列表,我可以得到每個日曆標題,但我不知道從哪裏獲取帳戶名稱。有這樣的官方API嗎?我還將如何檢索這些信息? App Store上的一些應用程序做顯示帳戶名稱,所以必須有一種方式(即還通過審批流程滑倒......)

感謝, 托馬斯

更新: 別的地方我發現對私人財產的引用。在我開始尋找這件事之前,是否有人知道該房產的名稱是什麼?

其他人也建議解析description(包括帳戶),但這不是一個非常安全或優雅的方式,所以我想避免這樣做。

更新2: 我確實發現有一個私有財產(及其名稱),它似乎工作正常。

+0

見[這個問題](http://stackoverflow.com/questions/6417632/how -to-access-an-ekcalendars-account-property)獲取關於私有API的信息,以及避免在iOS 4.3中使用私有API的可能入侵。 – puzzle 2011-06-20 23:27:21

回答

2

我已經瀏覽了Apple的文檔,並且帳戶名似乎無法通過公共API訪問。如果您使用私有屬性,您的應用將被立即拒絕,所以我想App Store上的其他應用使用desciption解析方法。

我建議你發佈一個與蘋果公司的錯誤報告,並要求他們通過公共API提供帳戶名稱。直到他們(如果他們這樣做),我認爲你唯一的選擇是解析描述,如果你想在你的應用程序商店

0

從iOS 5.0你可以從EKCalendar訪問EKSource。 您可以獲得該源的名稱&類型。

EKEventStore * eventStore = [[EKEventStore alloc] init]; 
    NSArray * calendars = [eventStore calendarsForEntityType:EKEntityTypeEvent]; 
    NSArray * typeNames = [[NSArray alloc] initWithObjects:@"TypeLocal",@"TypeExchange",@"TypeCalDAV",@"TypeMobileMe",@"TypeSubscribed",@"TypeBirthdays", nil]; 
    for (EKCalendar * calendar in calendars) { 
     NSString * calendarTitle = calendar.title; 
     EKSource * source = calendar.source; 
     NSString * accountName = source.title; 
     EKSourceType type = source.sourceType; 
     NSLog(@"%@ : %@ (%@)", calendarTitle, accountName, typeNames[type]); 
    } 

日誌生成的模樣:

  • CalHotmail:交易所(TypeExchange)
  • BirthHotmail(只讀):交易所(TypeExchange)
  • MyCoolAccountCal:雅虎(TypeCalDAV)
  • Calendrier:Default(TypeLocal)生日:其他(TypeBirthday)
  • Calendrier:[email protected]。 FR(TypeExchange)
  • ArnoTest:Gmail的(TypeCalDAV)
  • 聯繫人的生日和事件:Gmail的(TypeCalDAV)