我有一个广告布局程序,它构建页面(NSView 类 Page)并在每个页面上放置边距和装订线(更多 NSView),然后是广告(NSView 类 Ad)。该应用程序会自动从数据库源中放置广告,并在每个页面上寻找合适的空间。然后,用户可以选择将广告从第 4 页移动到第 2 页。他们还可以选择手动移动广告或让应用程序自动移动,假设您刚刚移动的广告最终会出现在 0/ 0 x/y 位置,然后其他位置将流向任何可用空间,如果当前位置没有空间(由于您刚刚移动的广告),则被推送到下一页。
我正在做的是获取所有页面(它们本身就是一个名为 masterpage 的 NSView 的子视图),然后遍历它们以将它们的所有子视图放入一个数组中。遍历该数组,过滤边距和装订线,如果它是广告,则将其从超级视图中删除。我的想法是从一个干净的页面开始并替换所有广告。问题是我不断收到此错误:
Collection <NSCFArray: 0x1078900> was mutated while being enumerated.
我正在使用这段代码:
//loop through all the pages
for(NSView* thisPage in masterPageSubViews) {
//get all the ads on this page
NSArray* thisPageSubviews = [thisPage subviews];
for(NSView* thisPageSubview in thisPageSubviews) {
if ([[thisPageSubview className] isEqual:@"Ad"]) {
[thisPageSubview removeFromSuperview];
}
}
}
我想我对为什么会收到此错误感到困惑。我认为数组中的对象与循环中创建的对象是分开的。
由于每个页面上的广告数量是动态的,我如何在不使用数组的情况下将它们从超级视图中剥离?