Параметр меню, наряду с несколькими другими параметрами меню, будет по умолчанию включен по умолчанию, и приложение будет правильно распознавать объект документа при запуске.

оманда и я работали над существующим приложением Какао без документов. Это наше первое приложение 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) является делегат окна.

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

Ответы на вопрос(1)

Ваш ответ на вопрос