ekevent EKparticipant ईमेल कैसे प्राप्त करें?ekevent EKparticipant ईमेल कैसे प्राप्त करें?
EKParticipant क्लास में ऐसी कोई विशेषता नहीं है।
क्या प्रतिभागियों की सूची दिखाने के लिए मूल आईओएस प्रतिभागियों नियंत्रक को प्रस्तुत करना संभव है?
ekevent EKparticipant ईमेल कैसे प्राप्त करें?ekevent EKparticipant ईमेल कैसे प्राप्त करें?
EKParticipant क्लास में ऐसी कोई विशेषता नहीं है।
क्या प्रतिभागियों की सूची दिखाने के लिए मूल आईओएस प्रतिभागियों नियंत्रक को प्रस्तुत करना संभव है?
मैं इस एक ही सवाल था और जब मैं इस साल WWDC पर था, मैं कई Apple इंजीनियर पूछा और वे कोई सुराग नहीं था। मैंने एक लड़के से पूछा कि मैं लाइन में मिला हूं और उसके पास जवाब था:
event.organizer.URL.resourceSpecifier
यह किसी भी ईकेपार्टेंटेंट के लिए काम करता है। मुझे चेतावनी दी गई थी कि विवरण फ़ील्ड का उपयोग न करें क्योंकि यह किसी भी समय बदल सकता है।
आशा है कि इससे मदद मिलती है! ऊपर दिए गए समाधानों
संपत्ति प्रति एपीआई संस्करण 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 का यूआरएल को देखने के लिए हो सकता है द्वारा ईमेल खींच। आउटपुट मेलो जैसे मेलो: [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
पर वापस आएं। EKParticipant के लिए
हाय! मैंने आपके कोड का उपयोग करने की कोशिश की, लेकिन रिकॉर्ड वैरिएबल हमेशा मेरे मामले में शून्य है। यूआरएल जैसा आपने बताया है (प्रिंसिपल के साथ समाप्त)। मुझे प्रलेखन में मिला, कि अगर प्रतिभागी नहीं मिला है, तो शून्य वापस आ गया है। लेकिन मैंने अपनी पता पुस्तिका और कैलेंडर की जांच की और यह अस्तित्व में है (इसलिए यह पाया जाना चाहिए)।कोई विचार क्यों ABRecordWithAddressBook: शून्य वापस आ जाएगा? – haluzak
@ हलुज़क कोई विचार नहीं, क्षमा करें। यह एपीआई स्पष्ट रूप से भयानक है। मुझे लगता है कि हम अंततः उदाहरण के लिए अनियंत्रित 'ईमेल एड्रेस' चयनकर्ता भेजने पर बस गए। – ierceg
मैंने इसे अंत में समझ लिया, मुझे पता पुस्तिका तक पहुंच नहीं थी, इसलिए आपके द्वारा प्रदान किए गए कोड का उपयोग करने से पहले आपको पहुंच का अनुरोध करना होगा। अन्यथा यह अच्छी तरह से काम किया, धन्यवाद! लेकिन मैं सहमत हूं कि एपीआई भयानक और लगभग अनुपयोगी है। – 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
}
}
सबसे अच्छा समाधान जब EKParticipant प्रमुख है – Rakesh
यह काम नहीं करता है (आईओएस 7.1) – ierceg
यह 'होना चाहिए participant.URL.resourceSpecifier', लेकिन न सिर्फ' organizer' संपत्ति EKEvent में, जैसे 'उपस्थिति' संपत्ति – likid1412