我正在做的是获取所有页面(它们自己是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]; } } }
我想我很困惑为什么我得到这个错误.我认为数组中的对象与循环中创建的对象是分开的.
由于每个页面上的广告数量都是动态的,如何在不使用阵列的情况下将其从超级视图中删除?
解决方法 正如错误所说,使用快速枚举时,您无法修改数组的内容. removeFromSupervIEw从supervIEw的子视图数组中删除视图(这是一个难以阅读的句子!).这意味着您在枚举时正在改变数组.可能有更好的方法,但是您可以使用广告视图填充NSMutableArray,然后一旦完成,您可以将它们从supervIEw中删除(未经测试的代码,在浏览器中输入!)
NSMutableArray *vIEwsToRemove = [[NSMutableArray alloc] init];for(NSVIEw* thisPage in masterPageSubVIEws) { //get all the ads on this page NSArray* thisPageSubvIEws = [thisPage subvIEws]; for(NSVIEw* thisPageSubvIEw in thisPageSubvIEws) if ([thisPageSubvIEw isMemberOfClass:[Ad class]]) [vIEwsToRemove addobject:thisPageSubvIEw]; } [vIEwsToRemove makeObjectsPerformSelector:@selector(removeFromSupervIEw)];[vIEwsToRemove release];总结
以上是内存溢出为你收集整理的数组 – NSView从superview中删除一些子视图全部内容,希望文章能够帮你解决数组 – NSView从superview中删除一些子视图所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)