2010-08-09 5 views
4

Quelqu'un peut-il me dire pourquoi mon application se bloque ici?Comment gérer les booléens dans NSMutableArrays?

et pourquoi il ne plante pas lorsque je remplace les objets YES par des valeurs NSString? Tout ce que je veux faire est de stocker des données booléennes dans la matrice et de modifier ces données plus tard, quelqu'un peut me dire s'il vous plaît comment faire cela?

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    NSMutableArray* arr = [[NSMutableArray alloc] initWithObjects:YES, YES, YES, YES, nil]; 
    NSLog([arr objectAtIndex:1]); 
} 

Répondre

14

OUI et NON sont BOOL, qui est pas une classe Objective-C. Les conteneurs Foundation peuvent uniquement stocker des objets Objective-C.

Vous devez les envelopper dans un NSNumber, comme:

NSNumber* yesObj = [NSNumber numberWithBool:YES]; 
NSMutableArray* arr = [[NSMutableArray alloc] initWithObjects: 
               yesObj, yesObj, yesObj, yesObj, nil]; 
NSLog(@"%d", [[arr objectAtIndex:1] boolValue]); 

La raison pour laquelle il accepte NSString est parce qu'un NSString est une sorte de classe Objective-C.

+1

Pour obtenir la valeur d'origine 'BOOL', vous pouvez utiliser' BOOL b = [[[array objectAtIndex: i] boolValue] '. – dreamlax

+1

Merci pour la réponse rapide, je souhaite que l'objectif-c ait la fonctionnalité de boxe automatique/unboxing comme il est en Java, de toute façon l'objectif-c est vraiment un langage pénible: S –

+0

@anasnakawa: Objective-C est assez mince sur la plaine C, d'où viendra la majeure partie de la douleur. – dreamlax

Questions connexes