我有一个使用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/

10-12 14:45