No. -[NSDocument close] is non-cancellable and non-reversible.

On Sep 21, 2012, at 9:55 AM, Markus Spoettl <ms_li...@shiftoption.com> wrote:

> OK, so one further question: Is there any chance that if -close is called the 
> document won't actually be closed and stays open?
> 
> Regards
> Markus
> 
> On 9/21/12 6:49 PM, Kevin Perry wrote:
>> Oh dear. Forget you heard me mention anything about unpublished API. The 
>> lack of an "_" threw me off...
>> 
>> Yes, you'll probably want to keep your own flag.
>> 
>> -KP
>> 
>> On Sep 20, 2012, at 11:41 PM, Markus Spoettl <ms_li...@shiftoption.com> 
>> wrote:
>> 
>>> Just to clarify: -isClosed is not something that is available on NSDocument 
>>> or NSWindowController, did you mean to say that I'll have to keep a flag 
>>> myself?
>>> 
>>> Regards
>>> Markus
>>> 
>>> On 9/20/12 6:53 PM, Kevin Perry wrote:
>>>> This is an known and unfortunate result of the current architecture of 
>>>> NSWindow, NSWindowController, and NSDocument.
>>>> 
>>>> There isn't any documentation I'm aware of that explicitly states that 
>>>> -close can be invoked re-entrantly, but it can be deduced from the 
>>>> existing documentation:
>>>> 
>>>> On -[NSDocument close]:
>>>> 
>>>>    "The default implementation of this method  … sends each of the 
>>>> document's window controllers a -close message"
>>>> 
>>>> On -[NSWindowController close]:
>>>> 
>>>>    "If the controller belongs to a document and it is either the last 
>>>> controller for the document or -shouldCloseDocument is YES, then this will 
>>>> also -close the document."
>>>> 
>>>> 
>>>> The best way around this at the moment is to first verify [self isClosed] 
>>>> == NO before calling super and doing your own work.
>>>> 
>>>> 
>>>> [kevin perry];
>>>> 
>>>> On Sep 19, 2012, at 1:06 PM, Markus Spoettl <ms_li...@shiftoption.com> 
>>>> wrote:
>>>> 
>>>>> Why does AppKit call into NSDocument's -close multiple times by indirect 
>>>>> recursion? Can this be on purpose?
>>>>> 
>>>>> It happens when I have this:
>>>>> 
>>>>> 1) A document with unsaved with changes
>>>>> 2) Terminate the app via CMD-Q
>>>>> 3) Answer "Don't Save" in the save-changes-sheet
>>>>> 
>>>>> This doesn't smell right. I override -close and call super right away, 
>>>>> doing some cleanup work afterwards. Under some bizarre situations which I 
>>>>> have not been able to recreate it gets called up to 4 times.
>>>>> 
>>>>> I'm pasting the call stack (line 366 is the call to super, line 375 is my 
>>>>> breakpoint).
>>>>> 
>>>>> Regards
>>>>> Markus
>>>>> 
>>>>> #0        0x00000001000034d8 in -[MyDocument close] at 
>>>>> /Users/markus/Projects/MyApp/src/MyDocument.m:375
>>>>> #1        0x00007fff8bed7d25 in -[NSWindowController _windowDidClose] ()
>>>>> #2        0x00007fff8a30ddf0 in -[QLSeamlessDocumentCloser 
>>>>> closeWindow:contentFrame:withBlock:] ()
>>>>> #3        0x00007fff8baa8602 in -[NSWindow _close] ()
>>>>> #4        0x00007fff8bbe1c74 in -[NSDocument close] ()
>>>>> #5        0x00000001000033c9 in -[MyDocument close] at 
>>>>> /Users/markus/Projects/MyApp/src/MyDocument.m:366
>>>>> #6        0x00007fff8bbf342e in __-[NSDocumentController 
>>>>> closeAllDocumentsWithDelegate:didCloseAllSelector:contextInfo:]_block_invoke_3
>>>>>  ()
>>>>> #7        0x00007fff8bbf54c5 in -[NSDocumentController 
>>>>> _something:didSomething:soContinue:] ()
>>>>> #8        0x00007fff8bbd62a8 in __-[NSDocument 
>>>>> canCloseDocumentWithDelegate:shouldCloseSelector:contextInfo:]_block_invoke_2
>>>>>  ()
>>>>> #9        0x00007fff8bbd5ec1 in __-[NSDocument 
>>>>> canCloseDocumentWithDelegate:shouldCloseSelector:contextInfo:]_block_invoke_11
>>>>>  ()
>>>>> #10       0x00007fff8bbe8e08 in -[NSDocument 
>>>>> _something:wasPresentedWithResult:soContinue:] ()
>>>>> #11       0x00007fff8bad8a4d in -[NSAlert 
>>>>> didEndAlert:returnCode:contextInfo:] ()
>>>>> #12       0x00007fff8bae53df in -[NSApplication endSheet:returnCode:] ()
>>>>> #13       0x00007fff8bad8913 in -[NSAlert buttonPressed:] ()
>>>>> #14       0x00007fff8053770d in -[NSObject performSelector:withObject:] ()
>>>>> #15       0x00007fff8b934f7e in -[NSApplication sendAction:to:from:] ()
>>>>> #16       0x00007fff8b934eb2 in -[NSControl sendAction:to:] ()
>>>>> #17       0x00007fff8b934ddd in -[NSCell _sendActionFrom:] ()
>>>>> #18       0x00007fff8b9342a0 in -[NSCell 
>>>>> trackMouse:inRect:ofView:untilMouseUp:] ()
>>>>> #19       0x00007fff8b9b3fc4 in -[NSButtonCell 
>>>>> trackMouse:inRect:ofView:untilMouseUp:] ()
>>>>> #20       0x00007fff8b932eaa in -[NSControl mouseDown:] ()
>>>>> #21       0x00007fff8b8fe348 in -[NSWindow sendEvent:] ()
>>>>> #22       0x00007fff8b897a55 in -[NSApplication sendEvent:] ()
>>>>> #23       0x00007fff8bae427e in -[NSApplication _shouldTerminate] ()
>>>>> #24       0x00007fff8b838115 in -[NSApplication terminate:] ()
>>>>> #25       0x000000010001a4a3 in -[AppDelegate terminate:] at 
>>>>> /Users/markus/Projects/rubiTrack/src/AppDelegate.m:219
>>>>> #26       0x00007fff8053770d in -[NSObject performSelector:withObject:] ()
>>>>> #27       0x00007fff8b934f7e in -[NSApplication sendAction:to:from:] ()
>>>>> #28       0x00007fff8ba21bfb in -[NSMenuItem _corePerformAction] ()
>>>>> #29       0x00007fff8ba21932 in -[NSCarbonMenuImpl 
>>>>> performActionWithHighlightingForItemAtIndex:] ()
>>>>> #30       0x00007fff8b99f524 in -[NSMenu performKeyEquivalent:] ()
>>>>> #31       0x00007fff8b99e175 in -[NSApplication _handleKeyEquivalent:] ()
>>>>> #32       0x00007fff8b897536 in -[NSApplication sendEvent:] ()
>>>>> #33       0x00007fff8b82e0c6 in -[NSApplication run] ()
>>>>> #34       0x00007fff8baaa244 in NSApplicationMain ()
>>>>> #35       0x000000010000b552 in main at 
>>>>> /Users/markus/Projects/MyApp/src/main.m:22
>>>>> #36       0x00000001000021c4 in start ()
>>>>> 
>>>>> --
>>>>> __________________________________________
>>>>> Markus Spoettl
>>>>> _______________________________________________
>>>>> 
>>>>> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
>>>>> 
>>>>> Please do not post admin requests or moderator comments to the list.
>>>>> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>>>>> 
>>>>> Help/Unsubscribe/Update your Subscription:
>>>>> https://lists.apple.com/mailman/options/cocoa-dev/kperry%40apple.com
>>>>> 
>>>>> This email sent to kpe...@apple.com
>>>> 
>>>> 
>>> 
>>> 
>>> --
>>> __________________________________________
>>> Markus Spoettl
>> 
>> 
> 
> 
> -- 
> __________________________________________
> Markus Spoettl


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to