我有一个使用NSDocument打开文件的应用程序。我的NIB中有一个NSView,我想根据打开的图像设置它的大小:
- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError {
NSLog("FOO");
// Load image
// ...
// Change size
[mainView setFrameSize:NSMakeRect(image.size.width, image.size.height)];
[mainView display]; // Redraw
[image release];
return YES;
}
然而,我做了一点foobar检查:'{FOO'记录在readFromData:ofType:error:
中,'BAR'记录在视图的initWithFrame:
方法中,但控制台中的输出是:
2010-10-30 16:20:45.670 Pwnshop[513:a0f] Foo
2010-10-30 16:20:45.680 Pwnshop[513:a0f] Bar
这意味着我将setFrameSize:
消息发送给未经启动的NSView。
如何让NSDocument首先加载nib,然后执行readFromData:ofType:error:
,或者更好地在加载nib之后更改视图大小?
感谢。
答案 0 :(得分:2)
如何让NSDocument首先加载nib,然后执行
readFromData:ofType:error:
,...
你不能。
从2011年开始编辑:但如果您可以要求Snow Leopard或更高版本,则可以覆盖the canConcurrentlyReadDocumentsOfType:
class method以返回YES
,在这种情况下,您将收到readFromData:ofType:error:
消息背景线程。阅读链接文档以了解相关要求和注意事项。
...或更好地在加载笔尖后更改视图大小?
实施windowControllerDidLoadNib:
并在那里进行窗口/视图更改。不要忘记调用super
,如NSDocument-subclass模板提供的实现所示。