如何獲取ekevent EKparticipant電子郵件?如何獲取ekevent EKparticipant電子郵件?
EKParticipant類沒有這樣的屬性。
是否可以呈現本機ios參與者控制器顯示參與者列表?
如何獲取ekevent EKparticipant電子郵件?如何獲取ekevent EKparticipant電子郵件?
EKParticipant類沒有這樣的屬性。
是否可以呈現本機ios參與者控制器顯示參與者列表?
我有這個同樣的問題,當我在WWDC這一年,我問了好幾個蘋果的工程師和他們沒有任何線索。我問了一個我認識的人,他有回答:
event.organizer.URL.resourceSpecifier
這適用於任何EKParticipant。我被告誡不要使用描述字段,因爲這可能隨時改變。
希望這會有所幫助!
該屬性不會暴露給每個API版本6.0 - 我正在尋找答案,並沒有發現任何其他工作,而不是從對象的描述中解析出電子郵件地址。例如:
EKParticipant *organizer = myEKEvent.organizer
NSString *organizerDescription = [organizer description];
//(id) $18 = 0x21064740 EKOrganizer <0x2108c910> {UUID = D3E9AAAE-F823-4236-B0B8-6BC500AA642E; name = Hung Tran; email = [email protected]; isSelf = 0}
分析上面的字符串轉換成一個NSDictionary的關鍵@「電子郵件」
另一種選擇可能是來查找EKParticipant的URL拉電子郵件。輸出應該是一個mailto URI,如mailto:[email protected]。這裏也有一些稀疏的文件位置:
以上解決方案是可靠的:
URL
可能類似於/xyzxyzxyzxyz.../principal
,顯然這不是一個電子郵件。EKParticipant:description
可能會更改,不包括電子郵件了。emailAddress
選擇器發送給該實例,但這是未記錄的,可能會在將來發生變化,同時可能會導致您的應用程序被拒登。所以最後你需要做的是使用EKPrincipal:ABRecordWithAddressBook
,然後從那裏提取電子郵件。就像這樣:
NSString *email = nil;
ABAddressBookRef book = ABAddressBookCreateWithOptions(nil, nil);
ABRecordRef record = [self.appleParticipant ABRecordWithAddressBook:book];
if (record) {
ABMultiValueRef value = ABRecordCopyValue(record, kABPersonEmailProperty);
if (value
&& ABMultiValueGetCount(value) > 0) {
email = (__bridge id)ABMultiValueCopyValueAtIndex(value, 0);
}
}
請注意,調用ABAddressBookCreateWithOptions
是昂貴的,所以你可能想這樣做,只有一次每個會話。
如果您不能訪問該記錄,則可以回退URL.resourceSpecifier
。
嗨!我嘗試使用你的代碼,但記錄變量總是零在我的情況。該網址與您所提到的一樣(以委託人結尾)。我在文檔中發現,如果未找到參與者,則返回nil。但我查了我的地址簿和日曆,它存在(所以應該找到它)。任何想法爲什麼ABRecordWithAddressBook:會返回零? – haluzak
@haluzak不知道,對不起。這個API非常糟糕。我認爲我們最終決定將無文檔的'emailAddress'選擇器發送到實例。 – ierceg
最後我想到了,我沒有訪問地址簿的權限,所以在使用您提供的代碼之前,您必須請求訪問權限。否則它運作良好,謝謝!但我同意API非常糟糕,幾乎無法使用。 – haluzak
類別:
import Foundation
import EventKit
import Contacts
extension EKParticipant {
var email: String? {
// Try to get email from inner property
if respondsToSelector(Selector("emailAddress")), let email = valueForKey("emailAddress") as? String {
return email
}
// Getting info from description
let emailComponents = description.componentsSeparatedByString("email = ")
if emailComponents.count > 1 {
let email = emailComponents[1].componentsSeparatedByString(";")[0]
return email
}
// Getting email from contact
if let contact = (try? CNContactStore().unifiedContactsMatchingPredicate(contactPredicate, keysToFetch: [CNContactEmailAddressesKey]))?.first,
let email = contact.emailAddresses.first?.value as? String {
return email
}
// Getting email from URL
if let email = URL.resourceSpecifier where !email.hasPrefix("/") {
return email
}
return nil
}
}
的最佳解決方案 – Rakesh
當EKParticipant主要是它不工作(的iOS 7.1) – ierceg
它應該是'participant.URL.resourceSpecifier',但不只是'organizer'財產在EKEvent中,如'attendees'屬性 – likid1412