Comment récupérer les contacts du carnet d'adresses avec Swift?
Je ne comprends pas pourquoi mon code ne compile pas avec Swift.
Je suis en train de convertir ce code Objective-C:
CFErrorRef error = NULL;
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);
if (addressBook != nil) {
NSLog(@"Succesful.");
NSArray *allContacts = (__bridge_transfer NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
}
C'est mon interprétation en Swift:
var error:CFErrorRef
var addressBook = ABAddressBookCreateWithOptions(nil, nil);
if (addressBook != nil) {
println("Succesful.");
var allContacts:CFArrayRef = ABAddressBookCopyArrayOfAllPeople(addressBook);
}
mais, Xcode rapports:
De "non géré" n'est pas convertible 'CFArrayRef'
Avez-vous une idée ?
source d'informationauteur user1545810
Vous devez vous connecter pour publier un commentaire.
Évidemment, si le ciblage iOS version 9 ou plus, vous ne devriez pas utiliser la
AddressBook
cadre à tous, et d'utiliser plutôt laContacts
cadre à la place.Donc,
Importation
Contacts
:Assurez-vous de fournir un
NSContactsUsageDescription
dans votreInfo.plist
.Ensuite, vous pouvez ensuite accéder à vos contacts. E. g. dans Swift 3:
Où
Ma réponse originale à cette question pour le Carnet d'adresses du cadre ci-dessous.
Quelques observations:
Si vous souhaitez utiliser
error
paramètre deABAddressBookCreateWithOptions
de la définir àUnmanaged<CFError>?
.Si elle échoue, prendre un coup d'oeil à l'objet d'erreur (
takeRetainedValue
de sorte que vous n'avez pas de fuite).Assurez-vous de
takeRetainedValue
du carnet d'adresses, trop, de sorte que vous n'avez pas de fuite.Vous ne devriez pas simplement de prendre les contacts, mais vous devriez probablement demander la permission d'abord.
Tirant tous ensemble, vous obtenez: