readFromData:ofType:error:在加载nib之前调用,所以我不能使用我的IBOutlets D:<

时间:2010-10-30 14:27:25

标签: cocoa nsview nib

我有一个使用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之后更改视图大小

感谢。

1 个答案:

答案 0 :(得分:2)

  

如何让NSDocument首先加载nib,然后执行readFromData:ofType:error:,...

你不能。

从2011年开始编辑:但如果您可以要求Snow Leopard或更高版本,则可以覆盖the canConcurrentlyReadDocumentsOfType: class method以返回YES,在这种情况下,您将收到readFromData:ofType:error:消息背景线程。阅读链接文档以了解相关要求和注意事项。

  

...或更好地在加载笔尖后更改视图大小?

实施windowControllerDidLoadNib:并在那里进行窗口/视图更改。不要忘记调用super,如NSDocument-subclass模板提供的实现所示。