我正在获取我的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
显示它们。它在Simulator(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]
最佳答案
将此行分解为单个语句,并检查引起问题的语句。
例如: 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
相关的意外错误。
关于ios - 显示通讯录联系人不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27144087/