2014-06-23 120 views
0

我正在向狀態欄菜單中添加一些菜單項,並在打開菜單之前刪除其中的一些菜單項。 這看起來像這樣的代碼:狀態欄菜單項刪除行爲

for(int i = 4; i <= 20; i++) { 
    [menu insertItemWithTitle:[NSString stringWithFormat: @"%d. Menuitem", i] action:nil   keyEquivalent:@"" atIndex:i]; 
} 

for(int j = 10; j <= 14; j++) { 
    [menu removeItemAtIndex:j]; 
} 

但結果是這樣的: menu result

這似乎刪除每第二個項目,但控制檯日誌看起來很不錯(菜單項的號碼,我,j)。

在索引中刪除項目:10標題: 「11.菜單項」 在索引
除去項:11標題: 「13.菜單項」 在索引
除去項:12標題:「15。菜單項」
在索引中刪除項目:13題:‘17菜單項’
在索引中刪除項目:14題:‘19菜單項’

有什麼刷新索引做或類似的東西?

+0

請複製你的代碼中的問題,而不是使用一個勉強可讀屏幕截圖。 –

+0

抱歉Guillaume。我剛剛更新了我的問題。 –

回答

1

不要從正在迭代的數組中刪除項目。在最好的情況下,你的索引與預期刪除的值不同步,最糟的情況是你會崩潰。

通常,您可以在刪除元素時減少索引(j),或者在循環之後立即刪除並刪除所有元素。

看到iterate list and remove items from it in objective-c?

在你的情況,你也許可以這樣做:

for(int j = 0; j < 4; j++) { 
    [menu removeItemAtIndex:10]; 
} 

(未經測試)

+1

非常感謝!我沒有想過索引結構。其他元素填寫刪除的像沙子:D –