J'essaye de charger les contacts pour mon application. Cela fonctionne bien dans le simulateur. Mais s'écraser dans l'iPhone. Le code que j'utilise:
func getContactNames() { let allContacts = ABAddressBookCopyArrayOfAllPeople(addressBookRef).takeRetainedValue() as Array for record in allContacts { let currentContact: ABRecordRef = record let currentContactName = ABRecordCopyCompositeName(currentContact).takeRetainedValue() as Ssortingng if(currentContactName != "") { println("found \(currentContactName).") } } }
Cette fonction est correcte et après avoir obtenu peu de contacts, l'application plante avec log:
fatal error: unexpectedly found nil while unwrapping an Optional value (lldb)
Je pense que cela est dû à Nom dans les contacts, si j'essaie d'get le numéro de téléphone, ça fonctionne bien .. Je peux voir tous les numéros de téléphone, mais en cas de Nom, je peux voir environ 350 contacts et ensuite les plantages.
Une idée de comment je peux résoudre ça?
Pour tenir count d'une valeur nulle potentielle (ce qui peut arriver lorsque l'logging d'un contact manque un nom), changez
let currentContactName = ABRecordCopyCompositeName(currentContact).takeRetainedValue() as Ssortingng
à
let currentContactName = ABRecordCopyCompositeName(currentContact)?.takeRetainedValue() as? Ssortingng
Utilisez le code ci-dessus cela fonctionne pour moi
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? Ssortingng println("First name = \(firstName)") } if (ABRecordCopyValue(person, kABPersonLastNameProperty) != nil){ let lastName = ABRecordCopyValue(person, kABPersonLastNameProperty).takeRetainedValue()as? Ssortingng println("Last name = \(lastName)") } } }