macos - 如何禁用自动重新打开最后一个文档?

标签 macos cocoa nsdocument nsapplication nsapplication-delegate

<小时/>

如何禁用自动重新打开最后一个文档?

<小时/>

当我执行应用程序时,它会调用方法readFromData

但是,问题是在我的版本 1 和版本 2 之间,我更改了应用程序保存的数据的结构。在 v1 中,根对象是一个数组。在 v2 中,根对象是一个具有两个键的字典,一个用于字符串,一个用于数组。

当应用程序加载时,它似乎从数据中加载一个数组,然后尝试从该数组中获取字典键的对象。

我该怎么办!!?

PS:我尝试创建一个 NSApplicationDelegate

        -(BOOL)applicationShouldOpenUntitledFile:(NSApplication*)app
        {
            return YES; 
        }


        - (BOOL)applicationOpenUntitledFile:(NSApplication *)sender
        {
            return YES ;
        }

但是我的应用程序从未调用这些方法。

<小时/>

编辑:

这是调用堆栈:

0   CoreFoundation                      0x00007fff8bc06f56 __exceptionPreprocess + 198
1   libobjc.A.dylib                     0x00007fff81f37d5e objc_exception_throw + 43
2   CoreFoundation                      0x00007fff8bc931be -[NSObject doesNotRecognizeSelector:] + 190
3   CoreFoundation                      0x00007fff8bbf3e23 ___forwarding___ + 371
4   CoreFoundation                      0x00007fff8bbf3c38 _CF_forwarding_prep_0 + 232
5   dictionnaireDouchoutique            0x0000000100007f22 -[Document readFromData:ofType:error:] + 498
6   AppKit                              0x00007fff89af3558 -[NSDocument readFromURL:ofType:error:] + 665
7   AppKit                              0x00007fff8999198c -[NSDocument _initForURL:withContentsOfURL:ofType:error:] + 151
8   AppKit                              0x00007fff89991890 -[NSDocument initForURL:withContentsOfURL:ofType:error:] + 360
9   AppKit                              0x00007fff89991677 -[NSDocumentController makeDocumentForURL:withContentsOfURL:ofType:error:] + 199
10  AppKit                              0x00007fff8999150f __-[NSDocumentController reopenDocumentForURL:withContentsOfURL:display:completionHandler:]_block_invoke_5 + 150
11  AppKit                              0x00007fff89991467 __-[NSDocumentController reopenDocumentForURL:withContentsOfURL:display:completionHandler:]_block_invoke_4 + 697
12  AppKit                              0x00007fff899911a9 -[NSDocumentController _openDocumentWithContentsOfURL:usingProcedure:] + 530
13  AppKit                              0x00007fff89990d95 __-[NSDocumentController reopenDocumentForURL:withContentsOfURL:display:completionHandler:]_block_invoke_3 + 242
14  libdispatch.dylib                   0x00007fff86329a82 _dispatch_call_block_and_release + 18
15  libdispatch.dylib                   0x00007fff8632b8f2 _dispatch_main_queue_callback_4CF + 308
16  CoreFoundation                      0x00007fff8bb9be7c __CFRunLoopRun + 1724
17  CoreFoundation                      0x00007fff8bb9b486 CFRunLoopRunSpecific + 230
18  HIToolbox                           0x00007fff87d652bf RunCurrentEventLoopInMode + 277
19  HIToolbox                           0x00007fff87d6c56d ReceiveNextEventCommon + 355
20  HIToolbox                           0x00007fff87d6c3fa BlockUntilNextEventMatchingListInMode + 62
21  AppKit                              0x00007fff8973d779 _DPSNextEvent + 659
22  AppKit                              0x00007fff8973d07d -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 135
23  AppKit                              0x00007fff897399b9 -[NSApplication run] + 470
24  AppKit                              0x00007fff899b5eac NSApplicationMain + 867
25  dictionnaireDouchoutique            0x00000001000075d2 main + 34
26  dictionnaireDouchoutique            0x0000000100001984 start + 52

最佳答案

在您的 NSDocument 子类中,覆盖 + (BOOL)autosavesDraft 并返回 NO,这样您在开发过程中就会安全。但是,一旦投入生产,您应该处理不同的文件格式而不会崩溃......

关于macos - 如何禁用自动重新打开最后一个文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15755508/

相关文章:

objective-c - 编辑 NSTextField 时添加热键

cocoa - 在基于文档的应用程序中,文档是否必须代表文件?

macos - 如何禁用窗口恢复?

xcode - Mac OS X : How to launch an application (. 应用程序)来自 "Command Line Tool"类型的应用程序?

macos - 获取脚本中 OS X shell 脚本所在的路径...当路径有空格时

objective-c - 在 OSX 中使用 ObjectiveC 识别当前光标类型

python - iPython 不读取 ~/.inputrc

cocoa - 通过 OAuth 2.0 使用特定帐户登录 Facebook

cocoa - 如何知道 WebView 何时完成渲染?

objective-c - 希望将选项卡引入基于文档的应用程序,想法?