2013-12-12 91 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];  
}