I set a breakpoint on -[NSDocument
performActivityWithSynchronousWaiting:usingBlock:]
It is hit exactly twice in my test case, both in the same call stack, which is:
#0 0x00007fff881b2464 in -[NSDocument
performActivityWithSynchronousWaiting:usingBlock:] ()
#1 0x00007fff881a2518 in -[NSDocument
runModalPrintOperation:delegate:didRunSelector:contextInfo:] ()
#2 0x000000010009e454 in -[GCOrteliusDocument
runModalPrintOperation:delegate:didRunSelector:contextInfo:] at
/Users/grahamcox/Projects/Artboard/Artboard/Source/Code/GCOrteliusDocument.m:1464
#3 0x00000001002f59fc in -[DKDrawingDocument printShowingPrintPanel:] at
/Users/grahamcox/Projects/DrawKit/DrawKit/../Source/Code/DKDrawingDocument.m:923
#4 0x00007fff881a1a52 in __-[NSDocument
printDocumentWithSettings:showPrintPanel:delegate:didPrintSelector:contextInfo:]_block_invoke_2
()
#5 0x00007fff881a95e0 in -[NSDocument _commitEditingThenContinue:] ()
#6 0x00007fff881a52ab in -[NSDocument
_commitEditingWithDelegate:didSomethingSelector:contextInfo:thenContinue:] ()
#7 0x00007fff881a18bf in __-[NSDocument
printDocumentWithSettings:showPrintPanel:delegate:didPrintSelector:contextInfo:]_block_invoke_1
()
#8 0x00007fff881b2670 in -[NSDocument
performActivityWithSynchronousWaiting:usingBlock:] ()
#9 0x00007fff881a17d1 in -[NSDocument
printDocumentWithSettings:showPrintPanel:delegate:didPrintSelector:contextInfo:]
()
#10 0x00007fff881a1763 in -[NSDocument printDocument:] ()
#11 0x00007fff90c4d11d in -[NSObject performSelector:withObject:] ()
The first time it is hit is at line #8, the second time at line number #0. It
is not hit at any time prior to this - all I'm doing is launching my app and
choosing "Print…".
I tried removing my override of runModalPrintOperation…, which had no effect.
That leaves the only override -printShowingPrintPanel, but of course that has
to be overridden or else Print does nothing. That method creates a view and
associates it with my data model so it can render its contents. Previously that
has never given me any trouble, though I'll investigate further.
That method is:
- (void) printShowingPrintPanel:(BOOL) flag
{
DKDrawingView* pdv = [[self makePrintDrawingView] retain];
DKViewController* vc = [pdv makeViewController];
[[self drawing] addController:vc];
NSPrintInfo* printInfo = [self printInfo];
[pdv setPrintInfo:printInfo];
[pdv setPrintCropMarkKind:[[self mainView] printCropMarkKind]];
NSPrintOperation* printOp = [NSPrintOperation
printOperationWithView:pdv printInfo:printInfo];
[printOp setShowsPrintPanel:flag];
[self runModalPrintOperation:printOp delegate:self
didRunSelector:@selector(documentDidRunModalPrintOperation:success:contextInfo:)
contextInfo:NULL];
[pdv release]; //removes the controller from the drawing when view
dealloced
}
While this calls out to other methods, it's all pretty simple - makes a view,
associates it with the existing data model owned by the document, and creates a
print operation with that view, which is then passed along to the modal print
op. All very standard I believe. I will attempt to cut this down to a simpler
case just to try and eliminate it. But at no point does it invoke
performActivityWithSynchronousWaiting:usingBlock:
Seems to me if Kevin Perry's comment is taken at face value, the first
invocation at line #8 is not completing, and so the second invocation is
blocking. If some prior code had not completed, line 8 would block, not line 0.
But NO code of mine is run prior to line #8, so I've hit another wall.
--Graham
On 23/08/2011, at 12:05 PM, Graham Cox wrote:
> On 23/08/2011, at 11:43 AM, Jerry Krinock wrote:
>
>> "Here is a list of NSDocument methods whose default implementations invoke
>> this method because they might present sheets, either to ask the user what
>> to do as they begin their work or because they may fail and present errors
>> to user:
>> -revertDocumentToSaved:
>> -saveDocumentWithDelegate:didSaveSelector:contextInfo:
>> -runModalSavePanelForSaveOperation:delegate:didSaveSelector:contextInfo:
>> -saveToURL:ofType:forSaveOperation:delegate:didSaveSelector:contextInfo:
>> -canCloseDocumentWithDelegate:shouldCloseSelector:contextInfo:
>> -duplicateDocumentWithDelegate:didDuplicateSelector:contextInfo:
>> -runModalPageLayoutWithPrintInfo:delegate:didRunSelector:contextInfo:
>> -printDocumentWithSettings:showPrintPanel:delegate:didPrintSelector:contextInfo:
>> -runModalPrintOperation:delegate:didRunSelector:contextInfo:
>> More uses of this method may be added to NSDocument in the future."
>
>
> Thanks Jerry - I just found the same documentation. Still trying to get my
> head around what it's actually saying…
_______________________________________________
Cocoa-dev mailing list ([email protected])
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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to [email protected]