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

Posted

技术标签:

【中文标题】readFromData:ofType:error: 在加载 nib 之前调用所以我不能使用我的 IBOutlets D:<【英文标题】:readFromData:ofType:error: called before loading nib so I can't use my IBOutlets D:< 【发布时间】:2010-10-30 14:27:25 【问题描述】:

我有一个使用 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 先加载笔尖,然后然后执行readFromData:ofType:error:,或者在加载笔尖之后更好地更改视图大小?

谢谢。

【问题讨论】:

【参考方案1】:

如何让 NSDocument 先加载 nib,然后再做readFromData:ofType:error:,...

你不能。

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

...或者更好地在 nib 加载后更改视图大小?

实现windowControllerDidLoadNib: 并在那里更改您的窗口/视图。不要忘记致电super,如 NSDocument 子类模板提供的实现所示。

【讨论】:

以上是关于readFromData:ofType:error: 在加载 nib 之前调用所以我不能使用我的 IBOutlets D:<的主要内容,如果未能解决你的问题,请参考以下文章