我正在尝试添加一个简单的添加到联系人功能。
只需添加变量
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 /设置 - >通用 - >复位 - >重置位置和隐私
答案 0 :(得分:1)
这是因为ABAddressBookCreateWithOptions
返回nil所以在其上调用takeRetainedValue()
会导致错误。
ABAddressBookCreateWithOptions
将返回nil是用户未允许您的应用访问联系人。在创建地址簿之前,您需要使用ABAddressBookGetAuthorizationStatus
来确定应用是否具有权限。
修改强>
听起来就像显示了权限提醒一样,禁止了。
您需要打开“设置”应用,向下滚动并点按应用名称,然后更改旁边的开关"通讯录"继续。