有道关闭NSDocument编程

问题描述:

我有NSDocument的子类,崩溃每当我使用[自行关闭],以避免默认的“保存”对话框中为新文件:有道关闭NSDocument编程

2013-02-25 15:23:06.338 MyApp[692:403] An uncaught exception was raised 
2013-02-25 15:23:06.338 MyApp[692:403] NSWindow: -_newFirstResponderAfterResigining is not a valid message outside of a responder's implementation of -resignFirstResponder. 
2013-02-25 15:23:06.356 MyApp[692:403] (
0 CoreFoundation      0x00007fff8b2cdf56 __exceptionPreprocess + 198 
1 libobjc.A.dylib      0x00007fff88c00d5e objc_exception_throw + 43 
2 CoreFoundation      0x00007fff8b2cdd8a +[NSException raise:format:arguments:] + 106 
3 CoreFoundation      0x00007fff8b2cdd14 +[NSException raise:format:] + 116 
4 AppKit        0x00007fff858e0c34 -[NSWindow _newFirstResponderAfterResigning] + 164 
5 AppKit        0x00007fff85882c8a -[NSTextView(NSSharing) resignFirstResponder] + 54 
6 AppKit        0x00007fff8536dd79 -[NSWindow makeFirstResponder:] + 429 
7 AppKit        0x00007fff85488dfb -[NSWindow dealloc] + 802 
8 AppKit        0x00007fff8528b955 -[NSWindow release] + 535 
9 AppKit        0x00007fff858b541c __destroy_helper_block_4 + 26 
10 libsystem_blocks.dylib    0x00007fff8702b174 _Block_release + 181 
11 libdispatch.dylib     0x00007fff84ab28f2 _dispatch_main_queue_callback_4CF + 308 
12 CoreFoundation      0x00007fff8b262e7c __CFRunLoopRun + 1724 
13 CoreFoundation      0x00007fff8b262486 CFRunLoopRunSpecific + 230 
14 HIToolbox       0x00007fff8d64e2bf RunCurrentEventLoopInMode + 277 
15 HIToolbox       0x00007fff8d65556d ReceiveNextEventCommon + 355 
16 HIToolbox       0x00007fff8d6553fa BlockUntilNextEventMatchingListInMode + 62 
17 AppKit        0x00007fff85252779 _DPSNextEvent + 659 
18 AppKit        0x00007fff8525207d -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 135 
19 AppKit        0x00007fff8524e9b9 -[NSApplication run] + 470 
20 AppKit        0x00007fff854caeac NSApplicationMain + 867 
21 MyApp        0x00000001059098d2 main + 34 
22 MyApp        0x00000001059098a4 start + 52 
23 ???         0x0000000000000003 0x0 + 3 
) 

有没有人见过这个或可任何人都会提示更好/正确的方式来关闭NSDocument而不显示保存对话框?

+0

我能问你为什么想在这里直接关闭文档时,文档?可能会提出一些想法,以替代路线,而不是直接攻击这个失败者。 – 2013-04-09 08:31:18

+0

嗨,迈克。这些文件代表博客文章。用户打开文档并将其保存到本地或发布到服务器。在大多数情况下,如果他们没有保存就发布信息,他们不希望在关闭文档时被要求保存,他们宁愿文档消失。这不是一个很大的交易,但这是我被一些用户问及的一个小问题。 – diego 2013-04-11 13:36:28

因此,根据您的后续评论来判断,您要做的是在特定情况下取消标准密切确认表。有些方法可以做到这一点:

  • 采用自动保存就地,从手动保存文件的古范式
  • 覆盖-[NSDocument canCloseDocumentWithDelegate:shouldCloseSelector:contextInfo:]所以它告诉代表“是的,你可以关闭”,而不是移开呈现片状
  • 一旦后制成,称之为[document updateChangeCount: NSChangeCleared]告知对方您认为它被保存
+0

我已经实现了autosaving-in-place,所以我会尝试第二个和第三个建议。谢谢。 – diego 2013-04-12 18:47:57

+0

啊,这是一个很好的观点。即使使用自动保存,如果用户关闭一个*从未保存的文档,操作系统仍然会抛出一个关于它的表单。所以是的,你需要其他的选项之一:-) – 2013-04-12 22:21:39

+0

看起来像'updateChangeCount:'有窍门。谢谢! – diego 2013-04-17 17:29:31