添加let addressBookRef:ABAddressBook时出现崩溃错误?

时间:2016-01-03 04:47:56

标签: swift addressbook

我正在尝试添加一个简单的添加到联系人功能。

只需添加变量

    let addressBookRef: ABAddressBook = ABAddressBookCreateWithOptions(nil, nil).takeRetainedValue()

在现有的DetailViewController类中,我的项目崩溃了:

fatal error: unexpectedly found nil while unwrapping an Optional value

只是取消对地址簿的反应,我的项目不会崩溃

是因为我在主视图中的detailviewcontroller中有变量吗?

我正在关注本教程http://www.raywenderlich.com/97936/address-book-tutorial-swift-ios

[编辑] 我也有

 @IBAction func addToContacts(sender: AnyObject) {
    let authorizationStatus = ABAddressBookGetAuthorizationStatus()

    switch authorizationStatus {
    case .Denied, .Restricted:
        //1
        print("Denied")
    case .Authorized:
        //2
        print("Authorized")
    case .NotDetermined:
        //3
        print("Not Determined")
        //promptForAddressBookRequestAccess(addContacts)
    }

    print("Add to contacts")
}

当我退出变量时,只是检查一下是什么情况我看到“拒绝”但我希望“未确定”,为什么被拒绝?

[编辑] 哇,这是一个痛苦的.....我花了1个小时来得到提示和一件事是有效的: 删除应用 - >重启iPhone - >提前2天设定日期/时间 - >重启iPhone - >再次编译应用程序

其他建议我没试过: 1 /唯一的内部版本号 2 /设置 - >通用 - >复位 - >重置位置和隐私

iOS resetting granting access to reminders

1 个答案:

答案 0 :(得分:1)

这是因为ABAddressBookCreateWithOptions返回nil所以在其上调用takeRetainedValue()会导致错误。

ABAddressBookCreateWithOptions将返回nil是用户未允许您的应用访问联系人。在创建地址簿之前,您需要使用ABAddressBookGetAuthorizationStatus来确定应用是否具有权限。

修改

听起来就像显示了权限提醒一样,禁止了。

您需要打开“设置”应用,向下滚动并点按应用名称,然后更改旁边的开关"通讯录"继续。