2015-12-10 1 views
0

J'essaie de récupérer des contacts à partir du carnet d'adresses. Mon code fonctionne correctement en Objective C, mais quand je me suis converti à rapide j'obtenir l'erreurErreur lors de l'extraction de la valeur à partir de CFArray

Impossible jeter la valeur de type « Swift.UnsafePointer <()> » à « Swift.AnyObject »

ci-dessous est mon code

var errorRef: Unmanaged<CFError>? = nil 
    let addressBook: ABAddressBookRef = ABAddressBookCreateWithOptions(nil, &errorRef).takeRetainedValue() 
    let allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue() as NSArray //as [ABRecordRef] 
    let numberOfPeople = ABAddressBookGetPersonCount(addressBook) 

    for (var i=0; i < numberOfPeople; i++){ 
     runOnMainQueueWithoutDeadlocking({() ->() in 
      ProgressHUD.show("Reading Contact \(i) out of \(numberOfPeople)") 
     }) 

     let aPerson = CFArrayGetValueAtIndex(allPeople, i) as! ABRecordRef  //Error here 
    } 

Comment puis-je convertir enregistrement à ABRecordRef. Aidez-nous

Répondre

1

Vous ne pouvez pas forcer à transformer un UnsafePointer<Void> en type. Vous devez d'abord convertir ce pointeur vide à UnsafePointer<Type> puis prendre sa mémoire:

let aPerson = UnsafePointer<ABRecordRef>(CFArrayGetValueAtIndex(allPeople, i)).memory 

Pour votre information ... ABAddressBook a été dépréciée sur iOS 9. Pour le nouveau code de ciblage qui OS, utilisez CNContactStore à la place.