在iPhone中加载联系人在Swift中崩溃

我想加载我的应用程序的联系人。 它在模拟器中工作正常。 但在iPhone中崩溃。 我正在使用的代码:

func getContactNames() { let allContacts = ABAddressBookCopyArrayOfAllPeople(addressBookRef).takeRetainedValue() as Array for record in allContacts { let currentContact: ABRecordRef = record let currentContactName = ABRecordCopyCompositeName(currentContact).takeRetainedValue() as String if(currentContactName != "") { println("found \(currentContactName).") } } } 

此function正确,并在得到less数联系后,应用程序崩溃与日志:

 fatal error: unexpectedly found nil while unwrapping an Optional value (lldb) 

我认为这是由于联系人姓名,如果我尝试获得电话号码,它工作正常..我可以看到所有的电话号码,但在名称的情况下,我可以看到约350名联系人,然后应用程序崩溃。

任何想法如何我可以解决这个问题?

为了说明潜在的零值(当联系人的logging缺less名字时可能发生),改变

 let currentContactName = ABRecordCopyCompositeName(currentContact).takeRetainedValue() as String 

 let currentContactName = ABRecordCopyCompositeName(currentContact)?.takeRetainedValue() as? String 

使用上面的代码,它为我工作

 func readAllPeopleInAddressBook(addressBook: ABAddressBookRef){ /* Get all the people in the address book */ let allPeople = ABAddressBookCopyArrayOfAllPeople( addressBook).takeRetainedValue() as NSArray for person: ABRecordRef in allPeople{ if(ABRecordCopyValue(person, kABPersonFirstNameProperty) != nil){ let firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty).takeRetainedValue() as? String println("First name = \(firstName)") } if (ABRecordCopyValue(person, kABPersonLastNameProperty) != nil){ let lastName = ABRecordCopyValue(person, kABPersonLastNameProperty).takeRetainedValue()as? String println("Last name = \(lastName)") } } }