2011-08-16 3 views
5

Necesito hacer referencia a los registros de ABPerson desde dentro de una aplicación. Yo uso el unique ID proporcionada porIdentifique los registros de ABRecord de forma exclusiva: ¿[ABRecord uniqueId] es inmutable?

- (NSString *)uniqueId 

y adjuntarlo a mi registro de contacto dentro de la aplicación.

Además, ahorro ABPerson'svCardRepresentation como punto de retorno. En caso de que la aplicación ya no sea capaz de localizar el ABRecord utilizando el uniqueID, la aplicación le pide al usuario que recupere el registro del libro de direcciones usando la vCardRepresentation guardada. Todo funciona bien

Lamentablemente, un amigo me dijo, ese ID único no es inmutable: durante una sincronización, uniqueId puede cambiar repentinamente.

Según él, en algún lugar de la documentación de iOS, Apple explica que no existe ninguna manera de inmutable identificar ABPersons usando uniqueId. En la documentación de Coco X de OS X, no pude encontrar esa pista.

En una Mac dada, ¿puede el ID único cambiar repentinamente? Si eso es cierto, ¿cuál es la forma correcta de identificar los registros de ABPerson desde una aplicación externa?

En caso de que uniqueID no sea inmutable, ciertamente puedo asignar una propiedad personalizada con un GUID. Lamentablemente, los campos personalizados no se sincronizan.

Ciertamente, preferiría usar uniqueId.

+0

@noa: ¡Gracias por la edición! – SteAp

+0

¿Nadie puede responder? – SteAp

+0

Claro. Es una pregunta interesante. – paulmelnikow

Respuesta

5

Para cuál es su valor, a partir TechDoc de Apple:

kABUIDProperty El identificador único para este registro. Se garantiza que nunca cambiará, sin importar cuánto cambie el registro. Si necesita almacenar una referencia a un registro, use este valor. Tipo: kABStringProperty. Disponible en Mac OS X v10.2 y posterior. Declarado en ABGlobals.h.

+0

¡Thx! Ciertamente, soy consciente de este detalle. Incluso alguien de ADC le dijo al otro desarrollador que NO confíe en uniqueIDs. De todas formas... – SteAp

2

Parece que el enfoque kABUIDProperty podría no funcionar más. Me encontré con esta entrada de blog con más discusión en los comentarios en:
http://blog.clickablebliss.com/2011/11/07/addressbook-record-identifiers-on-mac-and-ios/.

Un ejemplo: si un usuario decide activar la sincronización de iCloud, los identificadores únicos en la libreta de direcciones de ese usuario cambiarán. Si los usuarios desactivan la sincronización de iCloud, cambiarán de nuevo.

Adición: podría valer la pena mirar la entrada StackOverflow here.

documentos de Apple no dicen esto (citado desde el enlace):

"El método recomendado para mantener una referencia a largo plazo a un registro particular es almacenar la nombre y apellido, o un hash de la nombre y apellido, además del identificador. Cuando busca un registro por ID, compare el nombre del registro con su nombre almacenado. Si no coinciden, use el nombre almacenado para buscar el registro y almacene el nuevo ID para el registro ".

Cuestiones relacionadas