2014-06-23 162 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 –