2013-12-12 93 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

在'initiateLetters'方法中初始化'letters'可能是一个更好的选择。 – 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];  
}