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 (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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

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

Reply via email to