37 votes

Restauration d'un BOOL dans un NSDictionary à partir d'un fichier plist

J'ai un fichier plist qui contient un tableau de dictionnaires. Voici l'un d'eux:

Fred Dictionnaire
Nom De Fred
isMale [case est cochée]

Alors maintenant, je suis l'initialisation de ma Personne, de l'objet avec le dictionnaire que j'ai lu depuis le fichier plist:

 -(id) initWithDictionary: (NSDictionary *) dictionary {
    if (self = [super init])
    self.name = [dictionary valueForKey: @"Name"];
    self.isMale = ????
  }

Comment puis-je finir le code ci-dessus afin que l'auto.isMale est réglé à yes (OUI) si la case est cochée dans le fichier plist, et NON si elle ne l'est pas. De préférence également définie à NON si il n'y a pas de clé isMale dans le dictionnaire.

94voto

Vladimir Points 110327

Les valeurs BOOL sont généralement stockées dans des conteneurs obj-c enveloppés dans un objet NSNumber. Si c'est le cas dans votre cas, vous pouvez récupérer la valeur booléenne en utilisant:

 self.isMale = [[dictionary objectForKey:@"isMale"] boolValue];
 

6voto

djdrzzy Points 160

Vladimir a raison, je vais simplement faire un carillon et dire qu'il est bon de vérifier que ces valeurs de la liste existent également, et sinon, définissez-le sur une valeur par défaut en général.

Quelque chose comme:

 id isMale = [dictionary valueForKey:@"isMale"];
self.isMale = isMale ? [isMale boolValue] : NO;
 

Qui vérifie si la valeur de la clé "isMale" existe dans le dictionnaire. Si c'est le cas, il obtient la valeur boolValue. Si ce n'est pas le cas, il définit self.isMale sur la valeur par défaut NO.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X