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

While adding let addressBookRef: ABAddressBook i get a crash error?

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

只需添加变量

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

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

fatal error: unexpectedly found nil while unwrapping an Optional value

只需对 addressBookRef 进行注释,我的项目就不会崩溃

是不是因为我在主视图的 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")
}

当我对变量进行注释并检查情况时,我看到了 "Denied" 但我预计 "Not Determined",为什么被拒绝了??

[编辑] 哇,这真让人痛苦......我花了 1 小时来获得提示,但有用的是: 删除App->重启iPhone->设置date/time提前2天->重启iPhone->重新编译App

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

iOS resetting granting access to reminders

这是因为 ABAddressBookCreateWithOptions 是 returning nil 所以调用 takeRetainedValue() 会导致错误。

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


编辑

听起来像是在显示权限警告时按下了禁止。

您需要打开“设置”应用,向下滚动并点击您的应用名称,将 "Contacts" 旁边的开关更改为打开。