2012-09-24 6 views
14

यह कोड आईओएस 5.1 पर ठीक काम करता है और आईओएस 6 के साथ आईफोन सिम्युलेटर में भी काम करता है। यह आईफोन 4 पर आईफोन 4 पर चुपचाप विफल रहता है। अंत परिणाम यह है कि मैं संपर्क ऐप में कोई व्यक्ति नहीं जोड़ सकता है। (लॉग प्रत्येक प्रकार है) निम्नलिखित कोड के टुकड़े काम का न तो:आईओएस में डिवाइस पर संपर्क स्रोतों तक पहुंच नहीं सकते 6

ABRecordRef defaultSource = ABAddressBookCopyDefaultSource(_addressBook); 
NSLog(@"2 - defaultSource = %@", defaultSource); 

एबी: क्वेरी के लिए बयान संकलन नहीं किया जा सका (ABCCopyArrayOfAllInstancesOfClassInSourceMatchingProperties): चयन ROWID, नाम, ExternalIdentifier, प्रकार, ConstraintsPath, ExternalModificationTag, ExternalSyncTag, ACCOUNTID, सक्षम, सिंकडाटा, MeIdentifier, ABStore से क्षमताओं जहां सक्षम =?

2012-09-24 11: 00: 36.731 क्यूआर vCard [193: 907] 2 - defaultSource = (CPRecord: 0x1f59fd50 ABStore)

जब मैं करने के लिए मैं इस मिल पता पुस्तिका एक व्यक्ति को जोड़ने का प्रयास (ऐसा प्रतीत होता है क्योंकि स्रोत अमान्य है, भले ही ऐसा लगता है कि यह उपर्युक्त से ठीक हो सकता है):

2012-09-24 11: 18: 32.231 क्यूआर vCard [220: 907] ABAddressBookAddRecord त्रुटि = ऑपरेशन नहीं पूरा नहीं होगा। (ABAddressBookErrorDomain त्रुटि 1.)


मैंने सोचा कि मैं सभी स्रोतों मिल सकता है और उसके बाद एक चुनना है, लेकिन निम्नलिखित रिटर्न बिल्कुल भी नहीं:

CFArrayRef allSources = ABAddressBookCopyArrayOfAllSources (_addressBook); 
NSLog(@"2 - allSources = %@", allSources); 

एबी: क्वेरी के लिए बयान संकलन नहीं किया जा सका (ABCCopyArrayOfAllInstancesOfClassInSourceMatchingProperties): चयनित ROWID, नाम, बाहरी पहचानकर्ता, प्रकार, बाधाएं, बाहरी मॉडोडिफिकेशन टैग, बाहरी सिंकटैग, खाता आईडी, सक्षम, सिंकडाटा, MeIdentifier, क्षमताओं को सक्षम करें जहां सक्षम है ??;

2012-09-24 10: 58: ०९.९०८ क्यूआर vCard [177: 907] 2 - allSources =()

+0

मुझे पता चला कि आईओएस 6 में आपको उपयोगकर्ता से पता पुस्तिका में एक व्यक्ति जोड़ने के लिए अनुमति चाहिए। ऐप्पल फिर से हमारी रक्षा कर रहा है। कोड की जटिलता में जोड़ता है ... –

उत्तर

3

यह लॉग संदेश एक संकेत है कि अपने अनुप्रयोग का उपयोग करने की अनुमति नहीं (शायद अभी तक नहीं) है संपर्क। आईओएस 6 उपयोगकर्ताओं को पता पुस्तिका तक पहुंचने की अनुमति से इनकार करने की संभावना देता है।

उपयोगकर्ता द्वारा आपके ऐप को संपर्कों तक पहुंचने की अनुमति देने के बाद संदेश गायब हो जाता है - या तो पॉप अप संवाद के माध्यम से, या सेटिंग -> गोपनीयता -> संपर्कों पर जाकर।

इस विषय पर अधिक जानकारी के लिए, डब्ल्यूडब्ल्यूडीसी 2012 सत्र 710 "आईओएस और ओएस एक्स में गोपनीयता समर्थन" देखें।

+0

आपका सुझाव मेरे बहुत सारे समय बचाता है। धन्यवाद – Anju

24

मुझे एक ही समस्या थी और मुझे पॉपअप पर संपर्कों को एक्सेस करने की अनुमति नहीं मिल सका।

उत्तर केली द्वारा यहां पोस्ट किया गया: https://stackoverflow.com/a/12648938/480415

// Request authorization to Address Book 
    ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL); 

    if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) { 
    ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) { 
      // First time access has been granted, add the contact 
    }); 
    } 
    else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) { 
     // The user has previously given access, add the contact 
    } 
    else { 
     // The user has previously denied access 
     // Send an alert telling user to change privacy setting in settings app 
    } 
0

आप यहाँ गूगल से मिला है और आप आईओएस के नए CNContactStore ढांचे का उपयोग कर रहे हैं, और इन त्रुटियों को मिल रहा है, पर पढ़ें:

मैं सोचा कि यह मेरे सीएनकॉन्टैक्टस्टोर को एक सदस्य वैरिएबल बनाने के लिए क्लीनर होगा जो क्लास इंस्टेंस के साथ शुरू किया गया था:

class foo { 
    var contactStore = CNContactStore() 

    func findByIdentifier(identifier: String) -> CNContact { 
     let contact = try self.contactStore.unifiedContactWithIdentifier(identifier... 
     return contact 
    } 
} 

के बाद मैं इस बारे में पचास बार कहा जाता है, यह

एबी के साथ बाहर erroring शुरू कर दिया: क्वेरी के लिए बयान संकलन नहीं किया जा सका (ABCCopyArrayOfAllInstancesOfClassInSourceMatchingProperties)

मैं दर-सीमित मेरे कॉल करने की कोशिश की, लेकिन वह नहीं था मदद। यह पता चला कि के लिए एक नया CNContactStore instantiating हर कॉल शून्य प्रदर्शन असर था और पूरी तरह से मेरे लिए समस्या हल:

class foo { 

    func findByIdentifier(identifier: String) -> CNContact { 
     let contactStore = CNContactStore() 
     let contact = try contactStore.unifiedContactWithIdentifier(identifier... 
     return contact 
    } 
} 

आशा इस मदद करता है!

संबंधित मुद्दे