2013-12-12 3 views
0

У меня есть NSMutableSet, к которому я пытаюсь добавить метки. После добавления каждого этикетки, проверить количество установочных наборов и он возвращается как 0. Любая помощь будет оцененаObjective C - NSMutableSet не работает должным образом

В моем файле .h:

@interface MainMenu : CCLayerColor { 
    NSMutableSet* letters; 
} 

В моей .m файл:

-(void)initiateLetters{ 
    //Grab the window size 
    CGSize size = [[CCDirector sharedDirector] winSize]; 

    int i; 
    for(i=0;i<100;i++){ 
     CCLabelTTF *label; 
     int r = rand() % 35 + 60; 
     char c = (char) r; 
     label = [CCLabelTTF labelWithString:[NSString stringWithFormat:@"%c",c] fontName:@"Courier" fontSize:30]; 
     [label setColor:ccc3(0,0,0)]; 
     [label setOpacity:255/2]; 

     //Generate a random number for the x variable, y will be 0 
     int x = (arc4random() % (int)size.width); 
     int y = size.height+(arc4random() % 50)+25; 

     [label setPosition:ccp(x,y)]; 
     [self addChild:label]; 
     [letters addObject:label]; 

     //Here's what's printing 0: 
     printf("%lu",[letters count]); 
    } 
} 
+0

FYI - не объявлять 'letters' в .h файле. Поместите его в файл .m, где он принадлежит. – rmaddy

ответ

2

Вам нужно создать экземпляр набора, прежде чем вы сможете что-то добавить к нему. Вы можете сделать это в перегруженной реализации init:

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     letters = [[NSMutableSet alloc] init]; 
    } 
    return self; 
} 

... или в начале вашего initiateLetters метода:

- (void)initiateLetters 
{ 
    letters = [[NSMutableSet alloc] init]; 
    ... 

Вместо этого код размещен просто отправка addObject: в nil, который делает ничего.

+1

Возможно, это лучший вариант для инициализации 'letters' в методе' initiateLetters'. – rmaddy

0

массив, вероятно, ноль. Вы создали его в методе init класса?

что-то вроде

-(id) init { 

    if (self = [super init]){ 
     // ... 
     letters = [[NSMutableSet set] retain]; // not using ARC 
     // ... 
    } 
    return self; 
} 

и конечно

-(void) dealloc { 

    // ... 
    [letters release];    // not using ARC 
    [super dealloc];  
} 
Смежные вопросы