Objective c NSPrintOperation从不调用drawRect:

Objective c NSPrintOperation从不调用drawRect:,objective-c,cocoa,printing,Objective C,Cocoa,Printing,我有一个自定义的NSView子类,我正试图打印它。我让一个控制器运行以下代码: MyCustomView *printableView = [[MyCustomView alloc] init]; NSPrintOperation *po = [NSPrintOperation printOperationWithView:printableView]; [po runOperation]; 当我设置断点时,会运行此代码,并运行NSView中的自定义分页方法(knowsPageRange:和r

我有一个自定义的NSView子类,我正试图打印它。我让一个控制器运行以下代码:

MyCustomView *printableView = [[MyCustomView alloc] init];
NSPrintOperation *po = [NSPrintOperation printOperationWithView:printableView];
[po runOperation];
当我设置断点时,会运行此代码,并运行NSView中的自定义分页方法(
knowsPageRange:
rectForPage:
),但从未调用视图的
drawRect:
方法。它显示“打印”对话框,但所有打印的都是空白页


为什么我的
drawRect:
方法从未被调用?是否需要先进行某种设置?

指定的
NSView
初始值设定项是
-initWithFrame:
。虽然可以使用
-init
初始化
MyCustomView
,但其
-init
的实现应该调用
[super-initWithFrame:sometrect]
。是这样吗


换句话说,您的视图是否有框架rect?

是的,它的init确实调用了
[super initWithFrame:sometrect]
,但是它的框架后来在
rectForPage:
中被修改以适应页面大小。在
-rectForPage:
期间修改视图框架似乎很奇怪。你有没有试过给它一些合理的框架来开始,而不是修改它?另外,您是否尝试过不实现自定义分页,只是为了看看会发生什么?事实证明,我的自定义子视图有一个名为“frameSize”的属性,该属性会干扰同名的现有函数,导致它卡在零位。你的回答帮我找到了问题!谢谢我发现rectForPage:也是必需的。