小编Dav*_*ler的帖子

将基本Cocoa应用程序转换为基于文档的应用程序

我和我的团队一直在研究现有的,基于非文档的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

12
推荐指数
3
解决办法
2980
查看次数

标签 统计

cocoa ×1