Stocker des données dans NSUserDefaults
Dans mon iPhone, j'ai une classe appelée Contact
qui se compose d'un ABRecordRef
à servir de référence à un contact en particulier.
J'ai besoin de stocker ces groupes de contacts dans NSUserDefaults
mais les choses ne fonctionnent pas si bien depuis Contact
est une classe personnalisée.
Toutes les idées de quoi faire dans ce cas?
source d'informationauteur CodeGuy
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas utiliser
NSUserDefaults
pour une classe personnalisée. À partir de la documentation:Essayez d'utiliser
NSData
. Par exemple, pour charger des objets dans un tableau, vous pouvez le faireD'archiver les données, utilisation:
Tout cela va fonctionner qu'à condition que votre objet personnalisé est conforme à la
NSCoding
protocole:ABRecord
est opaque de type C, il n'est donc pas un objet au sens de l'Objective-C. cela signifie Que vous pouvez ne pas l'étendre, vous ne pouvez pas ajouter une catégorie sur elle, vous ne pouvez pas le message. La seule chose que vous pouvez faire est d'appeler des fonctions décrites dans leABRecord
de Référence avec leABRecord
en tant que paramètre.Vous pourriez faire deux choses pour être en mesure de garder les informations référencées par le
ABRecord
autour de:Obtenir le
ABRecord
sid
parABRecordGetRecordID()
. LeABRecordID
est défini comme int32_t de sorte que vous pouvez le convertir en uneNSInteger
et magasin où vous le souhaitez. Vous pouvez en obtenir l'enregistrement à partir deABAddressBookGetPersonWithRecordID()
ouABAddressBookGetGroupWithRecordID()
. Toutefois, l'enregistrement peut être modifié ou même supprimés par l'utilisateur ou une autre application pendant ce temps.Copier toutes les valeurs à l'intérieur de l'enregistrement à une norme
NSObject
sous-classe et de l'utilisationNSCoding
comme discuté ci-dessus pour le stocker. Vous serez alors, bien sûr, de ne pas bénéficier des modifications ou des ajouts à l'enregistrement de l'utilisateur pourrait avoir fait.Bien, Apple recommandation est de stocker l'identificateur de l'enregistrement, le prénom et le nom de famille. Vous pouvez alors essayer de récupérer les contacts à partir du carnet d'adresses par l'identificateur et, si l'enregistrement n'est pas trouvé, ou si ce n'est pas la bonne personne, essayez de récupérer par nom et prénom (depuis les identificateurs d'enregistrement peut changer en fonction de la source de vos données du carnet d'adresses).
Cela peut ou peut ne pas être ce que vous voulez, en fonction de pourquoi vous êtes de stocker les données. Mais l'on peut assez facilement mettre ces trois valeurs dans un NSDictionary et écrire le dictionnaire pour
NSUserDefaults
.ABRecordRef semble être un
const void *
afin de le stocker dansNSUserDefaults
vous avez de l'envelopper dansNSData
:NSData *d = [[NSData alloc] initWithBytes:thePointer length:sizeof(ABRecordRef)];
.Vous pouvez le stocker en fait l'utilisation de la conversion de vCard représentation, qui est CFStringRef, qui peut être facilement utilisé comme NSString.