我正在获取iOS 地址簿联系人,并将其存储在名为contacts[]
的数组中。
这是我的方法:
var contacts: [String] = []
func getContactNames() {
if !self.determineStatus() {
println("not authorized")
return
}
let people = ABAddressBookCopyArrayOfAllPeople(adbk).takeRetainedValue() as NSArray as [ABRecord]
for person in people {
self.contacts.append(ABRecordCopyCompositeName(person).takeRetainedValue())
}
}
这很好用,我用漂亮的UITableView
显示它们。它在模拟器(iOS 8.1)中运行良好,但在我的iPhone上运行不正常。
在我的手机上我得到了一个着名的错误:
fatal error: unexpectedly found nil while unwrapping an Optional value
问题是我在这里没有使用选项。经过不同的测试后发现,只有当我的联系人列表中有超过26个联系人时才会收到此错误。
很奇怪,26也是字母表中的字母数,所以我正朝那个方向搜索。
你有什么线索吗?我很感激你的帮助。谢谢
PS:在调试屏幕中,它似乎来自这一行:
let people = ABAddressBookCopyArrayOfAllPeople(adbk).takeRetainedValue() as NSArray as [ABRecord]
答案 0 :(得分:1)
将此行分解为单个语句,并检查哪一行导致问题。
E.g:
let a = adbk
let b = ABAddressBookCopyArrayOfAllPeople(adobe)
let c = b.takeRetainedValue()
let d = c as [ABRecord]
检查每个变量,你会发现它:)
在Swift中,您还可以将变量声明为Implicitly unwrapped optional type,声明为let a: Type!
(带感叹号)。它基本上意味着变量可以是nil(你不需要在构造函数中初始化它)但是你保证在应用程序的生命周期中它永远不会包含nil。引入此机制主要是为了维护Objective-C兼容性,但有时会导致一些意外的nil
相关错误。