2016-05-06 84 views
0
- (void)setToInitialStateMain 
{ 
    [super clearBoard]; 

    if (_data[@"StoneOne"] != nil) { 
     NSDictionary* stoneOne = _data[@"StoneOne"]; 
     NSNumber* c = stoneOne[@"Column"]; 
     NSNumber* r = stoneOne[@"Row"]; 
     NSInteger column = [c intValue]; 
     NSInteger row = [r intValue]; 
     [_boardCol addObject:[NSNumber numberWithInt:column]]; 
     [_boardRow addObject:[NSNumber numberWithInt:row]]; 
    } 
} 

所以@"StoneOne"@"Column"@"Row"鍵從NSDictionary plist文件來。當我嘗試將NSNumber @"Column"轉換爲NSInteger時,一切正常。不能NSNumber的對象添加到NSMutableArray的

現在,行「[_boardCol addObject:[NSNumber numberWithInt:column]];」在「列」是正確的整數(2)方面沒問題。但是,在方法調用結束時設置斷點以檢查_boardCol(以及_boardRow)時,兩個NSMutableArray*實例變量的值均爲nil。這是爲什麼?

+1

都是你的NSMutableArrays正確初始化? – zfetters

+0

你是什麼意思?我只是將它們作爲實例變量寫在我的@implementation Model文件的大括號中。那仍然沒有初始化它們嗎? – Frank

+0

沒有你真的需要分配和初始化他們仍然可以使用之前,更可能只是在你的初始化方法 – zfetters

回答

0

所有的實例變量都以nil開頭。並且一個調用nil的方法返回nil(或者什麼都不做)。你需要在某個時候自己實例化NSMutableArray。這通常是在-init完成,或者內嵌代碼檢查,如果伊娃是零,如果是這樣分配的:

if (self.boardCol == nil) { 
    self.boardCol = [[NSMutableArray alloc] init]; 
} 

上面沒有做,如果多個線程可能涉及安全的事情。在-init方法中創建它們通常更容易。

+0

運作良好....但是,當我嘗試從另一個方法(由另一個文件中的另一個對象調用)訪問對象時,我收到零。有什麼想法嗎? – Frank

+0

顯示您如何設置此課程的訪問權限。 –

+0

如果你的方法先被調用,它會工作;-)這就是爲什麼init方法是最簡單的 - 這將在任何人可以訪問它們之前實例化它們。或者,重寫getter方法來完成上述操作,以便任何調用getter方法的人都可以輕鬆創建它。 –