2010-01-14 6 views
2

Quand je suis en train de faire pour obtenir le BOOL dans un dictionnaire, je reçois:question BOOL en Objective-C

BOOL isTrue = [someDict objectForKey: @"isTrue"]; 

je reçois:

Initialization makes integer from pointer without a cast 

Je mis le dictionnaire par Pour ce faire:

self.someDict = [[NSMutableDictionary alloc] 
    initWithObjectsAndKeys: 
     self.isTrue, @"isTrue", 
     nil]; 

Des idées?

Répondre

19

Utilisation:

BOOL isTrue = [[someDict objectForKey:@"isTrue"] boolValue]; 

La seule façon de stocker un BOOL dans un NSDictionary est à elle dans la boîte un objet NSNumber. Un BOOL est primitif et un dictionnaire ne contient que des objets.

De même, pour stocker un BOOL dans un dictionnaire, utilisez:

[someDict setObject:[NSNumber numberWithBool:isTrue] forKey:@"isTrue"]; 

EDIT: (en réponse à un commentaire)

Il y a deux façons de représenter cela comme une @property. L'un est de déclarer l'ivar comme BOOL, et l'autre est de le déclarer comme NSNumber.

Pour le premier cas, l'ivar est: BOOL isTrue; et la propriété est @property BOOL isTrue; (j'ignore les conventions de dénomination, évidemment). Pour la NSNumber, l'ivar est: NSNumber * isTrue; et la propriété est @property (nonatomic, retain) NSNumber * isTrue;. Si vous allez avec cette route, vous pouvez vouloir fournir une seconde méthode de setter (setIsTrueBool ou quelque chose) qui vous permet de simplement passer en YES ou NO, et ensuite vous faites la boxe vous-même. Sinon, toute personne qui appelle cela devrait faire la boxe elle-même.

Personnellement, je serais très probablement aller avec l'option n ° 1, mais cela dépend vraiment de ce que l'objectif de la classe était.

+0

à quoi ressemblerait le @property? J'ai @property (nonatomic, assign) BOOL isTrue; –

+1

@LB - réponse éditée. –