2014-02-01 5 views
0

Прошу прощения, если это кажется тривиальным, но я уверен, что его разумный вопрос задать здесь. Я много работал над классом NSWindowController, и кажется, что единственный способ получить его для полной работы (для моей цели) - это создать новый файл xib вместе с ним.Как использовать класс NSWindowController

Мой вопрос в том, было бы целесообразным работать с MainMenu.xib и классом NSWindowController и инстанцированным контроллером объекта, чтобы получить взаимодействие с содержимым окон. До сих пор без xib выполнялись только следующие сегменты кода: awakeFromNib. Я хочу сохранить пространство xib-файла, сложность и легко интегрировать его с более крупным проектом. Просто fyi это не проект на основе документов. Должен ли я выбрать другой подкласс NSObject, отличный от NSWindowController? Или это невозможно?

код, необходимый для запуска на класс будет полностью работать следующим образом:

- (void) tableViewSelectionDidChange:(NSNotification *)notification 
{ 
    NSInteger selectedRow = [logsTableView selectedRow]; 


    if ([directoryList containsObject:[directoryList objectAtIndex:selectedRow]]) 
    { 
     NSString *logContent = [NSString stringWithContentsOfFile:[directoryList objectAtIndex:selectedRow] 
                encoding:NSUTF8StringEncoding 
                 error:NULL]; 

     if (logContent != NULL) 
     { 
      [logsTextView setString:logContent]; 
     } else 
     { 
      [logsTextView setString:@"No permission to read log"]; 
     } 
    } 
} 
+0

Почему, по вашему мнению, добавление отдельного файла .xib значительно увеличит размер или сложность или затруднит интеграцию? Я сомневаюсь, что любая из этих проблем действительна. – Caleb

+0

ОК, возможно, существенно не зависит от размера приложения, а от использования ресурсов, я имею в виду, что xib-файлы должны загружаться отдельно по отдельности? Я уверен, что кумулятивная загрузка xib-файла намного эффективнее. –

+1

Обычно более эффективно иметь отдельные xib. Если все находится в одном xib, тогда все в этом xib загружается при загрузке xib. Загрузка Xib/nib - это все или ничего. Вы ничего не спасаете, избегая xib в своем проекте. В большинстве приложений довольно много. – uchuugaka

ответ

2

NSWindowController обычно хочет создать окно он контролирует, что означает, что вы либо должны дать ему XIB файл, содержащий окно для создания или переопределения различных методов создания окна для настройки окна в коде. Поэтому, вероятно, нецелесообразно использовать уже созданное окно из другого XIB с вашим NSWindowController.

При этом я почти всегда создаю подкласс XIB и NSWindowController для каждого окна в моих приложениях. Даже окно настроек имеет собственный класс контроллера окон. Единственным исключением были бы чрезвычайно простые окна, но даже сейчас я изо всех сил стараюсь придумать хороший пример.

Ваш метод не вызывается, потому что экземпляр оконного контроллера не установлен в качестве вида таблицы delegate. Типичным примером здесь является создание вашего окна в XIB, установка вашего оконного контроллера как пользовательского класса объекта Owner владельца файла, а затем подключение к окну delegate и dataSource. Это делает ваш оконный контроллер источником данных и делегатом в виде таблицы, и соединения будут установлены автоматически при загрузке XIB.

+0

Спасибо @Alex за ваш ответ , Я действительно скептически отношусь к использованию xib для каждого окна, это, вероятно, зависит от цели, но я считаю, что это пустая трата ресурсов и время загрузки. –

+1

Три вещи: 1) не беспокойтесь о преждевременной оптимизации и 2) XIB очень быстро загружаются. Они представляют собой сериализованные представления вашего графа объектов. Любое время будет связано с построением объектов в файле, что произойдет независимо от того, в каком направлении вы идете. И 3) Это более чистая архитектура, которая будет легче поддерживать в течение длительного времени. – Alex

+1

Спасибо @Alex за все ваши впечатления, что было действительно полезно, теперь можно сознательно создать столько файлов xib, сколько захочу :) –

Смежные вопросы