Параметр меню, наряду с несколькими другими параметрами меню, будет по умолчанию включен по умолчанию, и приложение будет правильно распознавать объект документа при запуске.
оманда и я работали над существующим приложением Какао без документов. Это наше первое приложение Cocoa, хотя мы уже сделали несколько приложений для iOS.
Приложение действительно должно быть основано на документах, поэтому я начал пытаться преобразовать его. Но вещи здесь и там, кажется, не работают. Например, пункт меню Файл -> Открыть постоянно отключен (хотя я наконец-то включил пункт меню Файл -> Сохранить; изначально этого не произошло). Кроме того, я могу щелкнуть красный крестик, чтобы закрыть окно, хотя сам пункт меню Файл -> Закрыть отключен; однако, когда я закрываю окно с помощью кнопки X, метод dealloc в моей реализации NSDocument (SPDocumentInfo) не вызывается. Я создал образец совершенно нового приложения на основе документов только для сравнения; когда я закрываю окно, метод dealloc реализации SPDocument действительно вызывается (как я и ожидал). Так что это касается меня.
Я внес много изменений в проект здесь и там; они включают:
Сделал так, чтобы SPDocumentInfo расширял SPDocument примерно так в файле .h:
@interface SPDocumentInfo : NSDocument <NSWindowDelegate>
В SPDocumentInfo реализовано следующее:
- (NSString *)windowNibName {
return @"SPDocument";
}
- (void)windowControllerDidLoadNib:(NSWindowController *) aController {
[super windowControllerDidLoadNib:aController];
}
- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError {
NSString *xml = [self toXml];
return [xml dataUsingEncoding:NSUTF8StringEncoding];
}
- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError {
// will make this work later
if ( outError != NULL ) {
*outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL];
}
return YES;
}
Отредактировал файл .plist, добавив «Типы документов». Среди прочего, определено «Какао NSDocument Class» = «SPDocumentInfo».
Изменены некоторые соединения в SPDocumentInfo, чтобы они соответствовали соединениям в примере приложения на основе документов. Например, в SPDocument.nib владельцем файла (который представляет SPDocumentInfo) является делегат окна.
Итак, мне интересно, есть ли другие вещи, которые я мог бы упустить при преобразовании в приложение на основе документов. Или есть какие-нибудь руководства, как это сделать? (Я смотрел, но не мог найти). Или я должен просто начать с нового приложения на основе документов и попробовать в него все наши вещи? Вообще есть ли у кого-нибудь опыт с этим?