我和我的团队一直在研究现有的,基于非文档的Cocoa应用程序.这是我们的第一个Cocoa应用程序,尽管到目前为止我们已经完成了许多iOS应用程序.
该应用程序确实应该是基于文档的,所以我已经开始尝试转换它.但是这里和那里的东西似乎没有用.例如,文件 - >打开菜单项被永久禁用(尽管我最终将文件 - >保存菜单项设置为启用;最初它不会启用).另外,虽然文件 - >关闭菜单项本身被禁用,但我可以单击红色X关闭窗口; 但是,当我通过X按钮关闭窗口时,我的NSDocument实现(SPDocumentInfo)中的dealloc方法不会被调用.我创建了一个样本,全新的基于文档的应用程序,仅用于比较; 当我在那里关闭一个窗口时,确实调用了SPDocument实现的dealloc方法(正如我所期望的那样).所以这让我很担心.
我在这里和那里做了很多改变的项目; 他们包括:
Made SPDocumentInfo在.h文件中扩展SPDocument:
@interface SPDocumentInfo : NSDocument <NSWindowDelegate>
Run Code Online (Sandbox Code Playgroud)在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 …Run Code Online (Sandbox Code Playgroud)cocoa ×1