2015-04-01 3 views
1

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

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

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

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

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

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

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

+0

Как просто хранить их в массиве? –

+0

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

+0

Массивы (то есть '' NSArray') содержат сильные ссылки на их элементы. Вы сохраняете сильную ссылку на массив, и вы добавляете контроллеры представления в массив (который держит ссылки на них). Когда вы удаляете контроллер вида из массива, массив отпускает свою ссылку. Когда массив освобождается (после того, как вы отпустите свою сильную ссылку на него, когда ваш объект будет освобожден, если не раньше), он также высвободит ссылки на все его элементы. –

ответ

1

Вы можете сохранить ссылки на контроллеры вида в NSArray. Массивы содержат сильные ссылки на объекты, которые они содержат.