gpt4 book ai didi

swift - NSDocument 打开默认文档

转载 作者:可可西里 更新时间:2023-11-01 01:37:41 24 4
gpt4 key购买 nike

我正在用 Swift 编写一个基于 NSDocument 的应用程序。如果应用程序未使用文档参数启动,我已将其设置为打开默认文档。

我注意到,如果我启动该应用程序然后立即打开另一个文档,比如使用“打开”或“最近”,“无标题”默认文档会保留,即使它没有被触及。

我的印象是,在此工作流程中,无标题文档被认为是“偶然的”,应该被删除。这个对吗?如果是这样,我应该手动删除此窗口,还是我忽略了某个设置?

最佳答案

您描述的行为不是自动的。有关如何处理这种情况的示例,请参阅开源 TextEdit 示例代码。具体来说,take a look-[DocumentController replaceTransientDocument:] 实现中。

- (void)replaceTransientDocument:(NSArray *)documents {
// Transient document must be replaced on the main thread, since it may undergo automatic display on the main thread.
if ([NSThread isMainThread]) {
NSDocument *transientDoc = [documents objectAtIndex:0], *doc = [documents objectAtIndex:1];
NSArray *controllersToTransfer = [[transientDoc windowControllers] copy];
NSEnumerator *controllerEnum = [controllersToTransfer objectEnumerator];
NSWindowController *controller;

[controllersToTransfer makeObjectsPerformSelector:@selector(retain)];

while (controller = [controllerEnum nextObject]) {
[doc addWindowController:controller];
[transientDoc removeWindowController:controller];
}
[transientDoc close];

[controllersToTransfer makeObjectsPerformSelector:@selector(release)];
[controllersToTransfer release];

// We replaced the value of the transient document with opened document, need to notify accessibility clients.
for (NSLayoutManager *layoutManager in [[(Document *)doc textStorage] layoutManagers]) {
for (NSTextContainer *textContainer in [layoutManager textContainers]) {
NSTextView *textView = [textContainer textView];
if (textView) NSAccessibilityPostNotification(textView, NSAccessibilityValueChangedNotification);
}
}

} else {
[self performSelectorOnMainThread:_cmd withObject:documents waitUntilDone:YES];
}
}

如果您还查看 -openDocumentWithContentsOfURL:display:error: 和其他一些调用上述方法的地方,您将很好地了解它们是如何替换“临时文档”的"(“无标题”文档)与打开的文档。

希望对您有所帮助。

关于swift - NSDocument 打开默认文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34497218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com