Macos 从模板打开的无标题文档

Macos 从模板打开的无标题文档,macos,cocoa,nsdocument,Macos,Cocoa,Nsdocument,在无标题文档的地方,我想在我的应用程序包中加载一个给定的文档,让它像无标题文档一样运行 在NSDocumentController中重写此方法是可行的,但有一个问题,我一关闭无标题的文档,文件就会从包中删除 - (id)makeUntitledDocumentOfType:(NSString *)typeName error:(NSError *__autoreleasing *)outError { NSString * extension = @"aaa"; NSStrin

在无标题文档的地方,我想在我的应用程序包中加载一个给定的文档,让它像无标题文档一样运行

在NSDocumentController中重写此方法是可行的,但有一个问题,我一关闭无标题的文档,文件就会从包中删除

- (id)makeUntitledDocumentOfType:(NSString *)typeName error:(NSError *__autoreleasing *)outError {

    NSString * extension = @"aaa";
    NSString * untitledFilePath = [[NSBundle mainBundle] pathForResource:@"untitled" ofType:extension];
    NSURL * sourceUrl = [[NSURL alloc] initFileURLWithPath:untitledFilePath];

    Document * document = [[Document alloc] initForURL:nil withContentsOfURL:sourceUrl ofType:typeName error:outError];
    return document;
}

如何从应用程序包中保存的“模板”文档“加载”无标题文档?

当调用
-initForURL:withContentsOfURL:ofType:error:
时,以
nil
作为初始URL,这通常是
源URL
将成为未保存的自动保存文件的信号,如果不保存,最终将被删除(如果保存,将被移动)

我建议您初始化文档,然后使用文档的
read
方法之一读入内容并覆盖空文档。如果您希望在执行此操作后轻松放弃这些内容(即,如果不更改模板文档,则不会出现保存提示),则可能需要使用
updateChangeCount:
设置
NSChangeCleared

例如(插入到当前文档初始行的位置:

NSError *error;
Document *document = [[Document alloc] initWithType: extension error: &error];
if (document) {
    // load template
    if (![document readFromURL: sourceURL ofType: extension error: &error]) {
         // do something appropriate to abort the load
    }
    [document updateChangeCount: NSChangeCleared]; // don't prompt for save w/o changes
}
return document;