2013-09-27 6 views
5

का अनुरोध करने का अनुरोध नहीं कर सकता मुझे पता पुस्तिका तक पहुंच का अनुरोध करने में कोई समस्या है, क्योंकि ABAddressbook.Create हमेशा शून्य है।Xamarin ios: ABAddressbook.Create हमेशा शून्य,

तो मैं एक्सेस का अनुरोध कैसे कर सकता हूं?

NSError err = new NSError(); 
ABAddressBook ab = ABAddressBook.Create(out err) 
ab.RequestAccess (delegate {}); //ab always null 

सहायता के लिए धन्यवाद।

+0

एनएसईआरआरआर त्रुटि = नया एनएसईआरआरआर(); का उपयोग कर (ABAddressBook ab = ABAddressBook.Create (गलती से बाहर)) { ab.RequestAccess (प्रतिनिधि {}); } // डिस्पोज़ेड के बाद उपयोग किया गया, क्या दा नरक है ?! :( – anguish

+0

क्या आपको गलती में कोई मूल्य मिल रहा है? – Jason

+0

हां "ABAddressBookErrorDomain त्रुटि 1." – anguish

उत्तर

6

यदि यह null है तो कुछ गलत था और आपके NSError आपको यह बताने चाहिए कि यह क्या है (बीटीडब्ल्यू out पैरामीटर को प्रारंभ करने की आवश्यकता नहीं है)।

NSError err; 
var ab = ABAddressBook.Create (out err); 
if (err != null) { 
    // process error 
    return; 
} 
// if the app was not authorized then we need to ask permission 
if (ABAddressBook.GetAuthorizationStatus() != ABAuthorizationStatus.Authorized) { 
    ab.RequestAccess (delegate (bool granted, NSError error) { 
     if (error != null) { 
      // process error 
     } else if (granted) { 
      // permission now granted -> use the address book 
     } 
    }); 
} else { 
    // permission already granted -> use the address book 
} 
+0

को "ABAddressBookErrorDomain त्रुटि 1." त्रुटि मिली – anguish

+1

ऐप्पल दस्तावेज़ -> 'kABOperationNotPermittedByUserError' से। संभव है कि एप्लिकेशन को पहले ही इनकार कर दिया जा सके डिवाइस उपयोगकर्ता? अगर यह जा रहा था तो इसे पुनः सक्षम करने के लिए अपनी सेटिंग्स जांचें। – poupou

+0

हाँ एक बार मुझे यह मिल गया, मैंने परीक्षण के लिए कोई जवाब नहीं दिया। लेकिन अगर मैं ऐप हटा देता हूं, तो वह हमेशा मेरे फैसले को याद करता है? – anguish

0

यहाँ इस स्थिति से निपटने के लिए मेरे सूत्र है: जैसे

सामान्य में (iOS6 +) अपने कोड दिखना चाहिए।

private void RequestAddressBookAccess() 
{ 
    NSError error; 
    ABAddressBook addressBook = ABAddressBook.Create (out error); 
    if (error != null || addressBook == null) 
     ShowAddressBookAccessInstructions(); 

    else if (ABAddressBook.GetAuthorizationStatus() != ABAuthorizationStatus.Authorized) { 
     addressBook.RequestAccess (delegate(bool granted, NSError err) { 
      if (granted && err == null) 
       this.InvokeOnMainThread (() => DoStuff (addressBook)); 
      else 
       ShowAddressBookAccessInstructions(); 
     }); 
    } else 
     DoStuff (addressBook); 
} 

private void ShowAddressBookAccessInstructions() 
{ 
    UIAlertView alert = new UIAlertView ("Cannot Access Contacts", 
     "Go to Settings -> Privacy -> Contacts and allow this app to access your contacts to use this functionality", 
     null, "Ok", null); 
    alert.Show(); 
} 
+0

कुछ बेहतर त्रुटि प्रबंधन की आवश्यकता है, लेकिन यह इस बात पर निर्भर है कि आप इसे कैसे संभालना चाहते हैं। – macawm

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