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}
は、「電子メール」
別のオプションは、EKParticipantのURLをルックアップするためにあるかもしれない、@キーでメールを引っ張るNSDictionaryのに上記の文字列を解析します。出力は、mailto:[email protected]のようなmailto URIでなければなりません。いくつかのまばらなドキュメントがここにあります:
どれも信頼性がありません:
URL
は/xyzxyzxyzxyz.../principal
のようなものとすることができ、明らかにそれは電子メールではありません。EKParticipant:description
は変更され、電子メールはこれ以上含まれません。emailAddress
セレクタをインスタンスに送信することはできますが、これは文書化されておらず、今後変更される可能性があり、その間にアプリが不承認になる可能性があります。最後に、EKPrincipal:ABRecordWithAddressBook
を使用してそこからメールを抽出する必要があります。あなたは、セッションごとに一度だけということをしたいかもしれませんのでABAddressBookCreateWithOptions
の呼び出しは高価であること
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);
}
}
注:このように。
レコードにアクセスできない場合は、URL.resourceSpecifier
にフォールバックしてください。
こんにちは!あなたのコードを使ってみましたが、レコード変数は私の場合は常にゼロです。 URLはあなたが述べた通りです(プリンシパルで終わります)。私はドキュメンテーションにおいて、参加者が見つからなければ、nilが返されることを発見しました。しかし、私は私のアドレス帳とカレンダーをチェックし、それが存在する(それが見つかるはずです)。ABRecordWithAddressBook:なぜnilを返しますか? – haluzak
@haluzakいいえ、ごめんなさい。このAPIは率直にひどいです。私は最終的に文書化されていない 'emailAddress'セレクタをインスタンスに送ることに決めました。 – ierceg
私は最後にそれを理解しました。私はアドレス帳にアクセスできなかったので、あなたが提供したコードを使用する前にアクセスを要求しなければなりません。それ以外の場合はうまくいった、ありがとう!しかし、私はAPIがひどく、ほとんど使えないことに同意します。 – haluzak
EKParticipant用カテゴリー:
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でのプロパティ – likid1412