我正在向状态栏菜单中添加一些菜单项,然后在打开菜单之前删除其中的一些菜单项。 在代码中看起来像这样:
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];
}
但结果如下:
它似乎删除了每一秒,但控制台日志看起来很好(菜单项数量,i,j)。
删除索引处的项目:10,标题为:“11。菜单项” 删除索引处的项目:11,标题为:“13。菜单项”
删除了索引处的项目:12,标题为:“15。菜单项” 删除索引时的项目:13,标题为:“17。菜单项”
删除索引处的项目:14,标题为:“19。菜单项”
刷新索引或类似的东西有什么办法吗?
答案 0 :(得分:1)
不要从正在迭代的数组中删除项目。在最好的情况下,您将使用您希望删除的值与不同步索引,在最坏的情况下,您将崩溃。
通常,您可以在删除元素时递减索引(j
),或者在循环之后构建要删除的索引列表并立即删除所有元素。
请参阅iterate list and remove items from it in objective-c?
在您的情况下,您可能会执行以下操作:
for(int j = 0; j < 4; j++) {
[menu removeItemAtIndex:10];
}
(未测试的)