我有一个使用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检查:
readFromData:ofType:error:
中记录了'FOO',视图的initWithFrame:
方法中记录了'BAR',但是控制台中的输出是: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先加载笔尖,然后再执行
readFromData:ofType:error:
,或者在加载笔尖后更好地更改视图大小?谢谢。
最佳答案
如何使NSDocument首先加载笔尖,然后执行readFromData:ofType:error:
,…
你不能
从2011年开始进行编辑:但是,如果您需要Snow Leopard或更高版本,则可以覆盖the canConcurrentlyReadDocumentsOfType:
class method以返回YES
,在这种情况下,您将在后台线程上收到readFromData:ofType:error:
消息。阅读链接的文档以了解相关要求和注意事项。
…还是在装入笔尖后更改视图大小?
实施windowControllerDidLoadNib:
并在其中进行窗口/视图更改。正如NSDocument子类模板提供的实现所示,不要忘记调用super
。
关于cocoa - readFromData:ofType:error:在加载 Nib 之前调用,因此我无法使用IBOutlets D:<,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4059110/