我和我的团队一直在开发一个既有的、非基于文档的Cocoa应用程序。这是我们的第一个Cocoa应用程序,尽管到目前为止我们已经做了很多iOS应用。
然而,这个应用程序确实应该是基于文档的,所以我开始试着将其转换。但是其中有些地方似乎并不起作用。例如,文件 -> 打开 菜单项始终被禁用(尽管我最终使 文件 -> 保存 菜单项可用了;最初它不可用)。此外,我可以点击红色的X按钮关闭窗口,虽然 文件 -> 关闭 菜单项本身被禁用了;但是,当我通过X按钮关闭窗口时,我的NSDocument实现(SPDocumentInfo)中的dealloc方法并没有被调用。我创建了一个样本全新的基于文档的应用程序进行比较;当我在那里关闭一个窗口时,SPDocument实现中的dealloc方法确实被调用了(正如我所期望的)。因此,这让我感到担忧。
我在项目中做了很多更改,包括:
在.h文件中使SPDocumentInfo扩展SPDocument,如下所示:
@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文件,添加了“文档类型”。其中,定义了“Cocoa NSDocument Class”=“SPDocumentInfo”等内容。
修改了SPDocumentInfo中的一些连接,以匹配示例文档型应用程序中的连接。例如,在SPDocument.nib中,文件的所有者(代表SPDocumentInfo)是窗口的委托。
所以,我想知道在转换为文档型应用程序方面是否还有其他需要注意的事项?或者,是否有任何关于如何进行此操作的指南?(我已经搜索过了但找不到)。还是我应该从头开始制作一个新的文档型应用程序,并尝试将所有我们的内容都适应它?总的来说,有没有人有这方面的经验?