2011-08-16 6 views
5

Devo fare riferimento ai record di ABPerson dall'interno di un'applicazione. Io uso il unique ID fornito daIdentifica i record di ABRecord in modo univoco: [ABRecord uniqueId] è immutabile?

- (NSString *)uniqueId 

e allegarlo al mio in-app record di contatto.

Inoltre, salvo ABPerson'svCardRepresentation come riserva. Nel caso in cui l'app non sia più in grado di localizzare l'ABRecord utilizzando l'uniqueID, l'app chiede all'utente di recuperare il record di agenda utilizzando la vCardRepresentation salvata. Tutto funziona bene.

Sfortunatamente, un amico mi ha detto che l'ID univoco non è immutabile: durante una sincronizzazione, uniqueId potrebbe improvvisamente cambiare.

Secondo lui, da qualche parte nella documentazione iOS, Apple spiega che non esiste alcun modo per immutable identificare ABPersons utilizzando uniqueId. Nella documentazione Cocoa di OS X, non sono riuscito a trovare un suggerimento.

Su un determinato Mac, può cambiare improvvisamente l'ID univoco? Se è vero, qual è il modo corretto di identificare i record di ABPerson da un'applicazione esterna?

Nel caso in cui l'ID unidirezionale non sia immutabile, posso certamente assegnare una proprietà personalizzata con un GUID. Sfortunatamente, i campi personalizzati non si sincronizzano.

Certamente, preferirei usare uniqueId.

+0

@noa: Grazie per la modifica! – SteAp

+0

Nessuno è in grado di rispondere? – SteAp

+0

Sicuro. È una domanda interessante – paulmelnikow

risposta

5

Per che cosa è il suo valore, da TECHDOC di Apple:

kABUIDProperty L'ID univoco per questo record. È garantito che non cambierà mai, indipendentemente da quanto cambia il record. Se è necessario memorizzare un riferimento a un record, utilizzare questo valore. Digitare: kABStringProperty. Disponibile in Mac OS X v10.2 e versioni successive. Dichiarato in ABGlobals.h.

+0

Thx! Certamente, sono consapevole di questo dettaglio. Anche qualcuno di ADC ha detto all'altro sviluppatore di NON fidarsi di uniqueIDs. Comunque... – SteAp

2

Sembra che l'approccio kABUIDProperty non funzioni più. Mi sono imbattuto in questo post di blog con più discussioni nei commenti:
http://blog.clickablebliss.com/2011/11/07/addressbook-record-identifiers-on-mac-and-ios/.

Un esempio: se un utente decide di attivare la sincronizzazione di iCloud, gli ID univoci nella rubrica di quell'utente cambieranno. Se gli utenti disattivano la sincronizzazione di iCloud, cambieranno di nuovo.

Addendum: potrebbe essere utile esaminare la voce StackOverflow here.

documenti di Apple non dicono che questo (citato dal link):

"Il metodo raccomandato per mantenere un riferimento a lungo termine per un particolare record è quello di memorizzare il primo e l'ultimo nome o un hash del nome e cognome, oltre all'identificatore Quando si cerca un record per ID, confrontare il nome del record con il nome memorizzato Se non corrispondono, utilizzare il nome memorizzato per trovare il record e memorizzare il nuovo ID per il record. "