OS X Cocoa:基于 NSDocument 的应用程序未保存

Posted

技术标签:

【中文标题】OS X Cocoa:基于 NSDocument 的应用程序未保存【英文标题】:OS X Cocoa: NSDocument-Based Application not saving 【发布时间】:2013-01-01 19:04:53 【问题描述】:

我在编写基于 NSDocument 的应用程序时遇到了一个奇怪的问题。当我第一次创建文档并保存它时,一切正常。但是,当我重新打开文档(效果很好)时,主菜单中的“保存”、“另存为”和“恢复为保存”似乎都没有任何效果。方法

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

永远不会被调用。主菜单“关闭”的行为也很奇怪:它关闭了主文档窗口,但没有关闭任何辅助窗口。同样,只有在打开文档时才会观察到这种不规则行为;新创建文档时,单击主菜单中的“关闭”按预期工作。其他菜单项,“打开”项和我自己的自定义项都可以正常工作。

这是一个在 Snow Leopard 和 Lion 中开发的应用程序,当时没有任何问题。我最近升级到 Mountain Lion,但我不确定问题是从那里开始的,还是我对项目做了什么导致这种行为。当前用于编译应用的 SDK 是 10.7。

任何信息将不胜感激,并在此先感谢,

c.

【问题讨论】:

控制台中有什么? 我没有放在那里。挖一点我注意到 - (void)saveToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName forSaveOperation:(NSSaveOperationType)saveOperation delegate:(id)delegate didSaveSelector:(SEL)didSaveSelector contextInfo:(void *)没有调用 contextInfo。 因此,当加载文档时,我的 NSDocument 子类的 _windowControllers 数组中似乎没有 NSWindowController。我没有使用 -makeWindowControllers 方法,之前没有它也可以正常工作。关于为什么会加载文档但未创建其 NSWindowController 的任何想法? @trip:您应该将该信息添加到您的问题中。听起来这是你真正的问题,所以把它埋在评论中没有任何好处。 【参考方案1】:

好吧,如果您的应用程序允许,您可以使用 Core Data。这肯定会消除错误并让您仅使用绑定来构建应用程序。

【讨论】:

【参考方案2】:

好吧,看来我已经修好了,但我不知道怎么修。调试后我意识到 WindowController 确实被实例化了,所以不是那样的。我最终将项目的旧版本与一些最初显示相同行为的新代码组合在一起,但在某些时候它不再存在。我希望我知道我做了什么来破坏它并修复它,但我很高兴它现在可以工作了!

感谢 Moray,我认为是时候转向 Core Data。

谢谢大家,

c.

【讨论】:

以上是关于OS X Cocoa:基于 NSDocument 的应用程序未保存的主要内容,如果未能解决你的问题,请参考以下文章

在基于文档的 Cocoa 应用程序中避免耦合?

Cocoa 自定义 NSDocument 保存

Xcode 5 Cocoa 应用程序无法在 OS X 10.6 上加载 Nib

保护文档架构中的模型(Cocoa/Swift)

在没有 Cocoa 的情况下创建 OS X 窗口

许可证密钥验证框架(OS X、Cocoa)?