2013-11-10 1 views
1

Я не очень уверен, как работают документы на основе приложений. Я создал некоторые действия для NSObject в Mainmenu.xib. Одна из этого вызывается, когда пользователь нажимает на «File> New»:Определите контроллер для NSDocument для приложения на основе документов

-(IBAction) newDocument:(id)sender{ 
    Document* newDoc =[[Document alloc] init]; 
    [[NSDocumentController sharedDocumentController]addDocument:newDoc]; 
    [newDoc addWindowController: [[NSWindowController alloc] initWithWindowNibName:[newDoc windowNibName] owner:newDoc]]; 
    [newDoc showWindows]; 
} 

Я также этот код внутри OpenDocument: (идентификатор) действия отправителя, который делает то же самое, но из данных конечно нагрузки для определения рабочей области приложения.

Если я запустил приложение, он отображает пустой документ без вызова действия newDocument. Я не знаю, как остановить пустой документ и установить newDocument: называться. Тогда, если я тоже делаю openDocument (поэтому у меня есть два документа, один пустой и один нет), и я выполняю некоторую операцию над вторым документом, который он также реплицирует в первом пустом. Я дважды проверяю делегатов, владельцев файлов, а также если уведомление - (void) windowDidBecomeMain: (NSNotification *) возвращает разные указатели, и все выглядит нормально. Возможно, я не понял поток приложений на основе документов, но я прочитал руководство Apple и другие инструкции. Что мне не хватает?

ответ

0

Нет. Я думал, что это путаница, а единственной проблемой было освобождение уведомления наблюдателя. Когда вы вызываете сообщение «закрыть» для уведомления NSDocument, наблюдатели все еще сохраняются. Работая в ARC, я пропущу этот момент. Так что это решение по моей проблеме. В любом случае, спасибо.

1

Метод IBAction вызывается, когда пользователь что-то сделал. Таким образом, это не вызывается из системы при запуске приложения.

Вы можете настроить поведение при запуске приложения с -applicationShouldOpenUntitledFile: (NSApplicationDelegate) и - это, вероятно, ваш следующий вопрос - -applicationShouldHandleReopen:hasVisibleWindows: (NSApplicationDelegate). Изменение поведения в обоих случаях не рекомендуется.

Глядя на свой метод действий, я не вижу причин, почему вы хотите его настроить.

Экземпляр вашего класса документов создается автоматически.

Вы можете создать для него оконный контроллер в подклассе документа. Это документировано.

Просто позвоните NSDocumentController сделайте работу за вас. В чем проблема поведения по умолчанию?

+0

Возможно, я запутался между nsdocumentcontoller и nswindowcontroller. –

+0

Основная проблема связана с операциями, которые я выполняю внутри окна, которые переупорядочиваются в другом, и я действительно не могу понять, почему –

+0

Вероятно, вы, вероятно, путаетесь с MVC. –

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