Преобразование базового приложения Какао в приложение на основе документов

Моя команда и я работали над существующим приложением Cocoa, не основанным на документах. Это наше первое приложение Cocoa, хотя мы уже сделали ряд приложений для iOS.

Приложение действительно должно быть основано на документах, поэтому я начал попытки его преобразовать. Но вещи здесь и там, похоже, не работают. Например, Файл -> Пункт меню «Открыть» отключен навсегда (хотя я наконец-то включил пункт меню «Файл» -> «Сохранить»; изначально этого не было). Кроме того, я могу щелкнуть красный X, чтобы закрыть окно, хотя сам пункт меню File -> Close отключен; однако, когда я закрываю окно с помощью кнопки X, метод dealloc в моей реализации NSDocument (SPDocumentInfo) не вызывается. Я создал образец нового приложения на основе документов только для сравнения; когда я закрываю там окно, действительно вызывается метод dealloc реализации SPDocument (как я и ожидал), так что меня это беспокоит

Я сделал много изменений в проекте здесь и там; они включают:

  • Сделано, чтобы SPDocumentInfo расширял SPDocument, как в файле .h:

     @interface SPDocumentInfo: NSDocument  Сохранить пункт меню во включенный; изначально этого не было). Кроме того, я могу щелкнуть красный X, чтобы закрыть окно, хотя сам пункт меню File -> Close отключен; однако, когда я закрываю окно с помощью кнопки X, метод dealloc в моей реализации NSDocument (SPDocumentInfo) не вызывается. Я создал образец нового приложения на основе документов только для сравнения; когда я закрываю там окно, действительно вызывается метод dealloc реализации SPDocument (как я и ожидал), так что меня это беспокоит 

    Я сделал много изменений в проекте здесь и там; они включают:

    • Сделано, чтобы SPDocumentInfo расширял SPDocument, как в файле .h:

       @interface SPDocumentInfo: NSDocument  Сохранить пункт меню во включенный; изначально этого не было). Кроме того, я могу щелкнуть красный X, чтобы закрыть окно, хотя сам пункт меню File -> Close отключен; однако, когда я закрываю окно с помощью кнопки X, метод dealloc в моей реализации NSDocument (SPDocumentInfo) не вызывается. Я создал образец нового приложения на основе документов только для сравнения; когда я закрываю там окно, действительно вызывается метод dealloc реализации SPDocument (как я и ожидал), так что меня это беспокоит 

      Я внес много изменений в проект здесь и там; они включают:

      • Сделано, чтобы SPDocumentInfo расширял SPDocument, как в файле .h:

         @interface SPDocumentInfo: NSDocument  Сам пункт меню «Закрыть» отключен; однако, когда я закрываю окно с помощью кнопки X, метод dealloc в моей реализации NSDocument (SPDocumentInfo) не вызывается. Я создал образец нового приложения на основе документов только для сравнения; когда я закрываю там окно, действительно вызывается метод dealloc реализации SPDocument (как я и ожидал), так что меня это беспокоит 

        Я внес много изменений в проект здесь и там; они включают:

        • Сделано, чтобы SPDocumentInfo расширял SPDocument, как в файле .h:

           @interface SPDocumentInfo: NSDocument  Сам пункт меню закрытия отключен; однако, когда я закрываю окно с помощью кнопки X, метод dealloc в моей реализации NSDocument (SPDocumentInfo) не вызывается. Я создал образец нового приложения на основе документов только для сравнения; когда я закрываю там окно, действительно вызывается метод dealloc реализации SPDocument (как я и ожидал), так что меня это беспокоит 

          Я сделал много изменений в проекте здесь и там; они включают:

          • Сделано, чтобы SPDocumentInfo расширял SPDocument, как в файле .h:

             @interface SPDocumentInfo: NSDocument  метод dealloc реализации SPDocument действительно вызывается (как я и ожидал.) Так что меня это беспокоит 

            Я сделал много изменений в проекте здесь и там; они включают:

            • Сделано, чтобы SPDocumentInfo расширял SPDocument, как в файле .h:

               @interface SPDocumentInfo: NSDocument  метод dealloc реализации SPDocument действительно вызывается (как я и ожидал). Так что меня это беспокоит 

              Я кое-где внес в проект много изменений; они включают:

              • Сделано, чтобы SPDocumentInfo расширял SPDocument, как в файле .h:

                 @interface SPDocumentInfo: NSDocument 
                
              • В SPDocumentInfo реализовано следующее:

                 - (NSString *) windowNibName {
                 return @ "SPDocument";
                }
                
                - (void) windowControllerDidLoadNib: (NSWindowController *) aController {
                 [супер windowControllerDidLoadNib: aController];
                }
                
                - (NSData *) dataOfType: (NSString *) ошибка typeName: (NSError **) outError {
                 NSString * xml = [сам toXml];
                 return [xml dataUsingEncoding: NSUTF8StringEncoding];
                }
                
                - (BOOL) readFromData: (NSData *) data ofType: (NSString *) typeName error: (NSError **) outError {
                 // сделаем это позже
                 if (outError! = NULL) {
                 * outError = [NSError errorWithDomain: NSOSStatusErrorDomain code: unimpErr userInfo: NULL];
                 }
                 вернуть ДА;
                }
                
              • Отредактировал файл .plist, чтобы добавить «Типы документов». Среди прочего, определено «Какао NSDocument Class» = «SPDocumentInfo».

              • Изменены некоторые соединения в SPDocumentInfo, чтобы они соответствовали соединениям в примере приложения на основе документа. Например, в SPDocument.nib владельцем файла (который представляет SPDocumentInfo) является делегат Window.

              Мне интересно, есть ли другие вещи, которые мне могут не хватать при преобразовании в приложение на основе документов. Или есть какие-нибудь инструкции, как это сделать? (Я искал, но не нашел). Или мне просто начать с нового приложения на основе документов и попытаться модернизировать все наши вещи? В основном, у кого-нибудь есть опыт с этим?

12
задан Dave Taubler 24 February 2011 в 00:10
поделиться