2012-12-23 17 views
6

मैं समूह का नाम प्राप्त करने की कोशिश कर रहा हूं लेकिन कई बार "उपयोगकर्ता द्वारा संपर्कों को फिर से लोड करने के लिए" इस विधि को कॉल करें, यह nil मान और निम्न त्रुटि प्रदान करता है।ABAddressBookCreate(), ABAddressBookGetGroupCount, ... वापसी @ "0x00000000 <nil>"?

-(void) getGroupsName 
    { 
     [groupsName removeAllObjects]; 
     //address book object to interact with iPhone contacts. 
     ABAddressBookRef addressbook = ABAddressBookCreate(); 
     //get groups count 
     CFIndex groupsCount   = ABAddressBookGetGroupCount(addressbook); 
     //get all available groups as array 
     CFArrayRef allGroups   = ABAddressBookCopyArrayOfAllGroups(addressbook); 

     for (int i = 0; i<groupsCount; i++) { 
      //get group of index=i from groups array 
      ABRecordRef group = CFArrayGetValueAtIndex(allGroups, i); 
      //get group name, I use __bridge_transfer to transfer from C to objective-c. 
      [groupsName addObject:(__bridge_transfer NSString*)ABRecordCopyCompositeName(group)]; 

     } 
     CFRelease(allGroups); 
     CFRelease(addressbook); 
    } 
////////////////////////////////////////////////////////////// 

    warning: Could not compile statement PRAGMA journal_mode = wal;: unable to open database file error 14 creating properties table: unable to open database file warning: Could not compile statement SELECT value FROM _SqliteDatabaseProperties WHERE key = ?;: unable to open database file warning: Could not compile statement SELECT value FROM _SqliteDatabaseProperties WHERE key = ?;: unable to open database file warning: Could not compile statement SELECT value FROM 
_SqliteDatabaseProperties WHERE key = ?;: unable to open database file warning: Could not compile statement SELECT ROWID, First, Last, Middle, NULL, NULL, NULL, Organization, NULL, NULL, Kind, NULL, NULL, Nickname, Prefix, Suffix, FirstSort, LastSort, CreationDate, ModificationDate, CompositeNameFallback, NULL, StoreID, NULL, FirstSortSection, LastSortSection, FirstSortLanguageIndex, LastSortLanguageIndex, NULL, NULL, NULL, PersonLink, NULL, IsPreferredName FROM ABPerson;: unable to open database file warning: Could not compile statement SELECT ROWID, First, Last, Middle, NULL, NULL, NULL, Organization, NULL, NULL, Kind, NULL, NULL, Nickname, Prefix, Suffix, FirstSort, LastSort, CreationDate, ModificationDate, CompositeNameFallback, NULL, StoreID, NULL, FirstSortSection, LastSortSection, FirstSortLanguageIndex, LastSortLanguageIndex, NULL, NULL, NULL, PersonLink, NULL, IsPreferredName FROM ABPerson;: unable to open database file warning: Could not compile statement INSERT OR REPLACE INTO _SqliteDatabaseProperties VALUES (?, ?);: unable to open database file warning: Could not compile statement SELECT value FROM 
_SqliteDatabaseProperties WHERE key = ?;: unable to open database file warning: Could not compile statement INSERT OR REPLACE INTO 
_SqliteDatabaseProperties VALUES (?, ?);: unable to open database file warning: Could not compile statement SELECT value FROM 
_SqliteDatabaseProperties WHERE key = ?;: unable to open database file warning: Could not compile statement SELECT value FROM 
_SqliteDatabaseProperties WHERE key = ?;: unable to open database file warning: Could not compile statement SELECT ROWID FROM ABGroup;: unable to open database file warning: Could not compile statement SELECT ROWID, Name, ExternalIdentifier, StoreID, NULL, NULL, NULL FROM ABGroup;: unable to open database file 

तो मैं अगर उपयोगकर्ता कई अद्यतन और हर समय बनाने के समय से अच्छा नहीं देशी अधिसूचना का प्रयोग मुझे पता है जब addressbook मैं addressbook का उपयोग समय की संख्या में कमी करने के लिए संशोधित करते हैं, लेकिन अभी भी addrssbook प्राप्त संशोधित इस मेथोड या addressbook से संबंधित किसी अन्य को कॉल करना होगा।

तो अभी भी आपकी मदद चाहिए ???

+0

कृपया देखें http://stackoverflow.com/questions/13053976/catch-22 -ऑर्डर-टू-द-डॉक्यूमेंटेशन-एड्रेस-बुक-यूज -6 -12 – rmaddy

+0

@rmaddy यह वही मामला नहीं है, मेरा कोड पहली बार संपर्क करता है और हर बार, लेकिन मेरे पास पुनः लोड बटन है जब उपयोगकर्ता इसे 20 से अधिक बार क्लिक करता है तो यह – Omarj

+0

से ऊपर की त्रुटि को वापस लौटाता है, मुझे नहीं पता था कि आपको कई पुनरावृत्तियों के बाद ही समस्या थी। – rmaddy

उत्तर

0

क्यों आप आपके द्वारा बनाए गए समय की संख्या को कम करने और का उपयोग करके ABAddressBookRef का उपयोग करने के लिए tring नहीं कर रहे हैं निम्नलिखित:

void ABAddressBookRegisterExternalChangeCallback (
    ABAddressBookRef addressBook, 
    ABExternalChangeCallback callback, 
    void *context 
); 

इस के लिए अनुमति देते अपने ऐप को पता है कि एड्रेसबुक बाहरी द्वारा संशोधित हो जाता है। और आपको यह बताने के लिए कि आपको पता पुस्तिका को फिर से एक्सेस करने की आवश्यकता है।

अपने विधि के लिए एक ही बात है कि आप इसे पोस्ट करते हैं, हर बार जब आप फोन यह नया उपयोग के साथ नई वस्तु बनाने जाएगा पुस्तक को संबोधित करने के

+1

thx यह मेरे लिए काम है, अब कोई क्रैश नहीं है और कोई एसक्यूएल युद्ध नहीं :) – Omarj

1

ABAddressBookCreate आईओएस 6 में decprecated किया गया है। ABAddressBookCreateWithOptions का उपयोग करें, यदि आपके पास पता पुस्तिका तक पहुंच नहीं है तो यह CFErrorRef ऑब्जेक्ट लौटाएगा।

+0

अभी भी मुझे एक ही समस्या बताते हैं, विधि को कॉल करने के बाद कई बार यह शून्य हो जाएगा, इसलिए मुझे लगता है कि एसडीके से यह स्वयं ?? – Omarj

+0

क्या आपने CFErrorRef को देखने का प्रयास किया था? –

+0

जैसा कि आप देखते हैं कि यह कोई त्रुटि नहीं चेतावनी दे रहा है, इसलिए इसे लॉग इन नहीं कर सकता है या त्रुटि के लिए कोई पतला नहीं कर सकता है और – Omarj

-1

जैसा कि इंगित किया गया है, @ thelaws आपको IOS6 में ABAddressBookCreateWithOptions का उपयोग करना होगा। अगर ([[[UIDevice currentDevice] systemVersion] floatValue]> 5.1) {

है
ABAddressBookRef ab = ABAddressBookCreateWithOptions(NULL, NULL); 
    __block BOOL accessGranted = NO; 
    if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) { 
     ABAddressBookRequestAccessWithCompletion(ab, ^(bool granted, CFErrorRef error) { 
      // First time access has been granted, add the contact 
      accessGranted = granted; 
     }); 
    } 
    else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized)  { 
     // The user has previously given access, add the contact 
     accessGranted = YES; 
    } 
    else { 
     // The user has previously denied access 
     // Send an alert telling user to change privacy setting in settings app 
    } 
    if (accessGranted) { 
// your code goes here 
} 
} 
else { 
// your code goes here 
} 

एक और बात आप प्रारंभ की है, GROUPSNAME कहीं? आप ABExternalChangeCallBack प्राप्त करने के लिए का उपयोग कर ..

अलावा यह से, कर रहे हैं पता पुस्तिका की अधिसूचना?

मुझे लगता है कि आपको उसी मॉड्यूल के भीतर समूह कोड रखना चाहिए, जहां आप संपर्कों तक पहुंच रहे हैं। (! यदि यह आप में मदद नहीं करता, स्पष्ट है)

+0

पहली बात है कि मैं ABExternalChangeCallBack का उपयोग करता हूं और यह मुझे दुर्घटना से बचने के लिए और 10 बार देता है "जब उपयोगकर्ता अपडेट करता है तो ऐप को सूचित किया जाता है। यदि यह बहु-समय हुआ तो पता पुस्तिका पुनः प्राप्त करें "। दूसरा: संपर्कों के लिए यह वही है यदि मैं इसे बहु बार पूछता हूं तो यह दुर्घटनाग्रस्त हो जाएगा या मेरे पास शून्य मूल्य पर वापस आ जाएगा। इसलिए इससे मदद नहीं मिलती है :( – Omarj

+1

सिद्धांत में सही है, लेकिन -1 फ्लोट लेने के लिए सिस्टम संस्करण का वैल्यू। यह एपीआई उपलब्धता की जांच करने का अनुशंसित तरीका नहीं है। –