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:<的主要内容,如果未能解决你的问题,请参考以下文章