Este código funcionó bien en iOS 5.1 y también funciona en el simulador de iPhone con iOS 6. No funciona silenciosamente en mi iPhone 4 con iOS 6. El resultado final es que no se puede agregar una persona a la aplicación Contactos. Ninguno de los trabajos fragmentos siguientes de código (registro cronológico sigue cada uno):No se puede acceder a fuentes de contactos en el dispositivo en iOS 6
ABRecordRef defaultSource = ABAddressBookCopyDefaultSource(_addressBook);
NSLog(@"2 - defaultSource = %@", defaultSource);
AB: No se pudo recopilar declaración de consulta (ABCCopyArrayOfAllInstancesOfClassInSourceMatchingProperties): SELECT ROWID, nombre, ExternalIdentifier Tipo, ConstraintsPath, ExternalModificationTag, ExternalSyncTag, AccountID, Habilitado, SyncData, MeIdentifier, Capabilities FROM ABStore WHERE Enabled =?;
2012-09-24 11: 00: 36.731 QR vCard [193: 907] 2 - defaultSource = (CPRecord: 0x1f59fd50 ABStore)
Cuando trato de añadir una persona a la libreta de direcciones consigo este (parece ser porque la fuente no es válida, aunque parece que podría estar bien desde arriba):
2012-09-24 11: 18: 32.231 QR vCard [220: 907] ABAddressBookAddRecord error = La operación couldn no se complete (Error ABAddressBookErrorDomain 1.)
pensé que podía conseguir todas las fuentes y luego elegir uno, pero los siguientes rendimientos ninguno en absoluto:
CFArrayRef allSources = ABAddressBookCopyArrayOfAllSources (_addressBook);
NSLog(@"2 - allSources = %@", allSources);
AB: No se pudo recopilar declaración de consulta (ABCCopyArrayOfAllInstancesOfClassInSourceMatchingProperties): SELECCIONAR ROWID, Nombre, ExternalIdentifier, Tipo, ConstraintsPath, ExternalModificationTag, ExternalSyncTag, AccountID, Enabled, SyncData, MeIdentifier, Capabilities FROM ABStore WHERE Enabled =?;
2012-09-24 10: 58: 09,908 QR vCard [177: 907] 2 - AllSources =()
Descubrí que en iOS 6 necesita el permiso del usuario para agregar una persona a la libreta de direcciones. Apple nos protege de nuevo. Se agrega a la complejidad del código ... –