OS X Cocoa: приложение на основе NSDocument не сохраняет

У меня возникла странная проблема с приложением на основе NSDocument, которое я пишу. Когда я впервые создаю документ и сохраняю его, все работает как надо. Однако, когда я снова открываю документ (который работает нормально), ни «Сохранить», «Сохранить как», ни «Вернуть к сохраненному» в главном меню, похоже, не действуют. Метод

- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError

никогда не звонят. Странно и поведение главного меню «Закрыть»: оно закрывает главное окно документа, но ни одно из вспомогательных окон. Опять же, это нерегулярное поведение наблюдается только при открытии документа; нажатие на «Закрыть» в главном меню работает должным образом при новом создании документа. Другие пункты меню, как «Открыть», так и мои собственные, работают нормально.

Это приложение было разработано в Snow Leopard, а затем в Lion, и тогда у него не было никаких проблем. Я недавно перешел на Mountain Lion, но я не уверен, начались ли проблемы там, или я что-то сделал в проекте, чтобы вызвать такое поведение. Текущий SDK, используемый для компиляции приложения, - 10.7.

Любая информация будет принята с благодарностью, и заранее спасибо,

c.


person trip    schedule 01.01.2013    source источник
comment
Что-нибудь в консоли?   -  person TheAmateurProgrammer    schedule 02.01.2013
comment
Ничего такого, чего я туда не положил. Немного покопавшись, я заметил, что - (void) saveToURL: (NSURL *) absoluteURL ofType: (NSString *) typeName forSaveOperation: (NSSaveOperationType) делегат saveOperation: (id) делегат didSaveSelector: (SEL) didSaveSelector contextInfo: (void *) contextInfo не вызывается.   -  person trip    schedule 02.01.2013
comment
Таким образом, кажется, что когда документы загружены, в массиве _windowControllers моего подкласса NSDocument нет NSWindowController. Я не использую метод -makeWindowControllers, и раньше он отлично работал без него. Любые мысли относительно того, почему документ загружается, но его NSWindowController не создается?   -  person trip    schedule 03.01.2013
comment
@trip: вы должны добавить эту информацию в свой вопрос. Похоже, что это ваша настоящая проблема, так что прятать ее в комментарии не идет ни к чему хорошему.   -  person Chuck    schedule 05.01.2013


Ответы (2)


Что ж, если ваше приложение позволяет, вы можете использовать Core Data. Это, безусловно, устранит ошибку и позволит вам создавать приложение только с привязками.

person Community    schedule 04.01.2013

Ну вроде починил, но понятия не имею как. После отладки я понял, что WindowController действительно создается, так что это не так. В итоге я объединил старую версию проекта с некоторым новым кодом, который изначально демонстрировал такое же поведение, но в какой-то момент его уже не было. Хотел бы я знать, что я сделал, чтобы сломать и исправить, но я рад, что теперь это работает!

И спасибо Морей, я думаю, что пора переходить на Core Data.

Спасибо всем,

c.

person trip    schedule 05.01.2013