У меня есть программа размещения объявлений, которая создает страницы (страница класса NSView) и на каждой странице размещает поля и желоба (больше NSViews), а затем рекламу (класс объявления NSView). Приложение автоматически размещает объявления из источника базы данных, ища подходящее место для заполнения на каждой странице. Затем у пользователя есть возможность переместить объявления со страницы 4 на страницу 2. Кроме того, у него есть возможность вручную показывать объявления или иметь автоматический поток приложений, при условии, что только что перемещенное объявление окажется в 0 /. 0 x / y местоположение, а затем остальные будут перетекать в любое доступное пространство, перемещаясь на следующую страницу, если на текущей странице нет места (из-за объявления, которое вы только что переместили).
Что я делал, так это собирал все страницы (сами подвиды NSView, называемые masterpage), а затем просматривал их, чтобы получить все их подвиды в массив. Переберите этот массив, отфильтровав поля и желоба, и, если это реклама, удалите ее из суперпредставления. Моей мыслью было начать с чистой страницы и заменить всю рекламу. Проблема в том, что я продолжаю получать эту ошибку:
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];
}
}
}
Полагаю, я не понимаю, почему я получаю эту ошибку. Я думал, что объекты в массиве были отделены от объектов, создаваемых в цикле.
Поскольку количество объявлений на каждой странице является динамическим, как я могу убрать их из их суперпредставления без использования массива?