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