Несколько экземпляров одного представления содержимого в NSStackView

Я создаю приложение, которое должно иметь окно прогресса, в котором я хочу динамически вставлять подпредставление для каждого обрабатываемого элемента, например, окно панели файлов копирования Finder. А также удалить его динамически, когда обработка завершена.

Я хочу использовать одно и то же представление NSViewController для всех вложенных представлений и использую NSStackView для управления представлениями.

Но чтобы вспомогательные представления оставались в памяти, я должен хранить на них сильную ссылку, и единственный известный мне способ — создать свойство для каждого вспомогательного представления, которое мне нужно отобразить. Как это:

@propery (strong) NSViewController *myViewController1;
@propery (strong) NSViewController *myViewController2;
@propery (strong) NSViewController *myViewController3;
@propery (strong) NSViewController *myViewController4;
....

Я хотел бы знать, есть ли лучший, более динамичный способ сделать это? Или мне нужно создать x количество свойств для подпредставлений, чтобы знать, что у меня достаточно экземпляров для выделения, потому что я не могу сказать, сколько просмотров процесса потребуется пользователю при запуске приложения и экспорте элементов.

Поэтому я хотел бы динамически выделить каждое подпредставление И создать сильную ссылку на него. Это возможно? Или есть другой способ сделать то, что я хочу?

Пожалуйста, дайте мне знать, если я неясно выразился, я с удовольствием объясню больше, чтобы получить помощь в решении этой проблемы.


person Erik Berglund    schedule 01.04.2015    source источник
comment
Как насчет того, чтобы просто хранить их в массиве?   -  person Ken Thomases    schedule 02.04.2015
comment
Да, это можно сделать, но как мне это сделать и при этом сохранить сильную ссылку, чтобы представления не освобождались. Я могу динамически добавлять и удалять столько, сколько захочу, в своем тестовом коде, но при попытке взаимодействовать с представлением я получаю сбой, поскольку оно было освобождено. Или я не правильно понял ваше предложение?   -  person Erik Berglund    schedule 02.04.2015
comment
Массивы (т.е. NSArrays) сохраняют сильные ссылки на свои элементы. Вы сохраняете единственную сильную ссылку на массив и добавляете контроллеры представления в массив (который сохраняет на них сильные ссылки). Когда вы удаляете контроллер представления из массива, массив освобождает свою ссылку. Когда массив освобождается (после того, как вы освобождаете свою сильную ссылку на него, когда ваш объект освобождается, если не раньше), он также освобождает свои ссылки на все его элементы.   -  person Ken Thomases    schedule 02.04.2015
comment
Спасибо, это сработало отлично. Я хотел бы отметить ваш комментарий как правильный ответ. Такое простое решение, что я полностью пропустил.   -  person Erik Berglund    schedule 03.04.2015


Ответы (1)


Вы можете хранить ссылки на контроллеры представления в файле NSArray. Массивы сохраняют сильные ссылки на содержащиеся в них объекты.

person Ken Thomases    schedule 03.04.2015