状态栏菜单项删除行为

时间:2014-06-23 09:50:39

标签: objective-c macos cocoa

我正在向状态栏菜单中添加一些菜单项,然后在打开菜单之前删除其中的一些菜单项。 在代码中看起来像这样:

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

它似乎删除了每一秒,但控制台日志看起来很好(菜单项数量,i,j)。

  

删除索引处的项目:10,标题为:“11。菜单项”   删除索引处的项目:11,标题为:“13。菜单项”
  删除了索引处的项目:12,标题为:“15。菜单项”   删除索引时的项目:13,标题为:“17。菜单项”
  删除索引处的项目:14,标题为:“19。菜单项”

刷新索引或类似的东西有什么办法吗?

1 个答案:

答案 0 :(得分:1)

不要从正在迭代的数组中删除项目。在最好的情况下,您将使用您希望删除的值与不同步索引,在最坏的情况下,您将崩溃。

通常,您可以在删除元素时递减索引(j),或者在循环之后构建要删除的索引列表并立即删除所有元素。

请参阅iterate list and remove items from it in objective-c?

在您的情况下,您可能会执行以下操作:

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

(未测试的)