2015-08-11 12 views
5

Sto provando a caricare i contatti per la mia app. Funziona perfettamente con Simulator. Ma crash in iPhone. Il codice che sto usando:Caricamento dei contatti da iPhone si blocca in Swift

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).") 
     } 
    } 
} 

Questa funzione è di essere correttamente e dopo avere pochi contatti, l'applicazione si blocca con registro:

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

Penso che sia dovuto al nominativo nella Rubrica, se io prova a ottenere il numero di telefono, sta funzionando bene .. Posso vedere tutti i numeri di telefono, ma in caso di Nome, posso vedere circa 350 contatti e poi l'app si blocca.

Qualche idea su come posso risolvere questo?

risposta

9

Per rappresentano un valore nullo potenziale (che può accadere quando il record di un contatto manca un nome), modificare

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

a

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

Ahh ... Grazie. :) –

2

Utilizza il codice precedente funziona per me

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)") 
    } 



    } 
} 
Problemi correlati