2014-06-24 113 views
0

我讀了一個文本文件到一個字符串數組。在下面的代碼中,我從該數組創建對象並將它們添加到NSMutableArray中。NSMutableArray額外零哨兵

NSMutableArray* metaphors = [[NSMutableArray alloc] init]; 
unsigned int i, cnt = [allLinedStrings count]; 
for(i = 0; i < cnt-3; i+=5) 
{ 
    Metaphor *newMetaphor = [[Metaphor alloc] init]; 
    [newMetaphor setMetaphorTitle: allLinedStrings[i]]; 
    [newMetaphor setCorrectAnswer: allLinedStrings[i+1]]; 
    [newMetaphor setLiteralAnswer: allLinedStrings[i+2]]; 
    [newMetaphor setWayOffAnswer: allLinedStrings[i+3]]; 
    [metaphors addObject:newMetaphor]; 
} 

至於問題,當我通過索引來訪問的任何項目([隱喻objectAtIndex:3]例如)所有其他元素(奇數的)是零元素。儘管如此,所有的對象都被添加到數組中。我的猜測是,addObject是添加一個元素到數組以及每次都有一個新的零標記?如果發生這種情況/我應該手動通過並刪除這些元素?另外一個方面,因爲我是新來的Objective-C,我的隱喻類包含4個實例字段,您可以在正文中看到:我確定有更快的語法來初始化這些對象之一,如果有人可以指出我正確的方式。謝謝。

回答

1

NSArray不能包含零。這是無效的。如果您在調用數組時沒有返回數組,那麼數組指針本身幾乎肯定是零。 (您可以將消息發送到Objective C中的零對象指針。它只是返回零/零)。

嘗試向NSArray添加nil會導致崩潰,並嘗試索引超過NSArray的結尾也崩潰。

有一個特殊的NSNull類提供了一個單獨的佔位符對象,可以取代NSArray中的零條目。

+0

是的,我的問題竟然與讀取文件有關,而不是將對象添加到數組中。謝謝。 – Connor

1

nil sentinel只是一種知道已達到變長數組最後一個元素的方法。零哨兵不添加到NSMutableArray;

NSMutableArray addObject方法不需要一個零哨兵,因爲你只添加一個對象,而不是一個可變長度的數組。

如果您需要向數組添加「nil」,您可以使用[NSNull null],它是一個「等於零」的對象。