C# Xamarin ios:ABAddressbook.Create始终为空,可以';请求访问

C# Xamarin ios:ABAddressbook.Create始终为空,可以';请求访问,c#,ios,xamarin.ios,xamarin,abaddressbook,C#,Ios,Xamarin.ios,Xamarin,Abaddressbook,我在请求访问地址簿时遇到问题,因为ABAddressbook.Create始终为空 那么我怎样才能申请访问权呢 NSError err = new NSError (); ABAddressBook ab = ABAddressBook.Create(out err) ab.RequestAccess (delegate {}); //ab always null 谢谢您的帮助。如果为空则表示有问题,您的n错误应该会告诉您是什么(顺便说一句,无需初始化out参数) 通常(iOS6+)您的代码应

我在请求访问地址簿时遇到问题,因为ABAddressbook.Create始终为空

那么我怎样才能申请访问权呢

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

谢谢您的帮助。

如果
为空
则表示有问题,您的
n错误应该会告诉您是什么(顺便说一句,无需初始化
out
参数)

通常(iOS6+)您的代码应该如下所示:

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
} 

这是我处理这种情况的公式

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();
}

NSError err=新的NSError();使用(ABAddressBook ab=ABAddressBook.Create(out err)){ab.RequestAccess(delegate{});}//在释放后使用,这是什么(您是否在err中获得值?是“ABAddressBookErrorDomain错误1。”从Apple doc->
KabOperationNotPermittedDbyUserError
。应用程序可能已经被设备用户拒绝访问了吗?如果是,请检查您的设置以重新启用它。是的,一旦我得到它,我回答为“否”进行测试。但是如果我删除应用程序,他会一直记住我的决定吗?好的,看起来是这样,我可以您可以使用它并只检查授权状态;)一些更好的错误处理是有保证的,但这取决于您想要如何处理它。