2010-09-28 71 views
1

我在我的代碼中有這個while循環。由於我在控制檯中打印了我的i++,因此該循環似乎工作正常。但由於某種原因,它僅在第一次檢查我的if聲明。我只能在名爲sectionZeroTitleArrayNSMutableArray中添加一個標題。我在這個循環中有很多數組,所以它可能會讓人困惑。我會盡我所能解釋。雖然循環工作,但不是if語句?

以下是我正在嘗試做的: 遍歷數組的長度(topicArray)。如果數組的(topicArray)與其他數組的(anotherArray)第一個對象相同,則將與topicArray具有相同索引(tit​​leArray)的對象添加到新的MutableArray(sectionZeroTitleArray)中。

我敢肯定我做了一些愚蠢的事,也許有人一整天都沒有盯着這個可以修理我?謝謝,麻煩您了。

while (i < (topicArray.count)) { 
    if ([topicArray objectAtIndex:i] == [anotherArray objectAtIndex:0]) { 
    [sectionZeroTitleArray addObject:[titleArray objectAtIndex:i]]; 
    } 
    NSLog(@"sectionZeroLoopCount: %d", i); 
    i++; 
} 
+0

在if語句前添加以下內容:'NSLog(@「topicArray value:%@,anotherArray value:%@」,[topicArray objectAtIndex:1],[anotherArray objectAtIndex:0]);' – 2010-09-28 23:00:01

+0

your topicArray contains兩次完全相同的對象?如果不是,那很自然,它只會進入if-brackets。當然,你不是指「objectAtIndex:i」? – Phlibbo 2010-09-28 23:00:12

+1

另外,數組中存儲的對象的類型是什麼?通常,您想要使用isEqual:或isEqualToString:而不是==。 – 2010-09-28 23:01:27

回答

5

你檢查指針相等當您使用==。你確定你要這麼做嗎?你期待的類型是什麼?如果它是一個NSString,使用isEqualToString:,否則使用NSObjectisEqual:方法:

如果預期的類型是NSString

if([[topicArray objectAtIndex:i] isEqualToString:[anotherArray objectAtIndex:0]]) { 
    //... 
} 

否則,你應該這樣做:

if([[topicArray objectAtIndex:i] isEqual:[anotherArray objectAtIndex:0]]) { 
    //... 
} 
1

是的,你在比較指針而不是數值。查看NSString的文檔,特別是比較字符串的isEqualToString:方法。