在我的基于NSPersistenDocument的项目中,我有一个这样的结构
myDocument (NSPersistentDocument) -> myDocument.xib (windows xib)
|
|-> view (the self.view) --> ... "other view"
|
|-> some NSArrayController
|
|-> myResourceViewController --> myResourceViewController.xib
|
|-> view (the self.view)
|
|-> myTreeController (a NSTreeController subclass)基本上,myResourceViewController是管理resourceView和数据的viewController的一个实例。
在myDocument的awakeFromNib方法中,我有以下代码
- (void)windowControllerDidLoadNib:(NSWindowController *)aController
{
...
[leftBar addSubview:resourceViewController.view]; //i add resourceViewController's view
resourceViewController.view.frame = leftBar.bounds;
...
}在myResourceViewController awakeFromNib方法中,我有:
-(void)awakeFromNib;
{
NSLog(@"%@", [self description]);
[removeButton bind:@"enabled" toObject:resourceTreeController withKeyPath:@"selection" options:[NSDictionary dictionaryWithObject:NSIsNotNilTransformerName forKey:NSValueTransformerNameBindingOption]];
NSArray *draggedTypes = [NSArray arrayWithObjects:ResourceURIPasteBoardType, nil];
[resourceOutlineView registerForDraggedTypes:draggedTypes];
}NSLog说同一个myResourceViewController实例的awakeFromNib被调用了4次,我不明白为什么。我唯一的ResourceViewController是在myDocument xib中创建的。我并不是到处使用NSNib加载方法。
发布于 2011-08-25 16:49:01
我找到了解决方案。每次NSOutlineView创建NSTableCellView时,都会调用awakeFromNib。
发布于 2013-07-24 12:46:37
makeViewWithIdentifier方法的NSTableView头文件中描述了根本原因:“...请注意,每次实例化对象时,'owner‘都会得到一个'awakeFromNib:’调用。”
我的解决方案很简单,但我希望不是所有人都适用:只需将tabelView定义为owner:
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
NSTableCellView *view = [tableView makeViewWithIdentifier:kTextViewIdentifier owner:tableView];
return view;
}发布于 2011-08-17 20:01:35
我不知道为什么它被调用了四次,但至少我可以解释两次awakeFromNib调用。重要的是要记住,即使是nib文件的文件所有者也会调用awakeFromNib,而不仅仅是nib文件中包含的对象。
因此,ResourceViewController的awakeFromNib至少会被调用两次:一次是在myDocument.xib中加载,另一次是从另一个nib加载由ResourceViewController管理的视图。
最好在其他方法中执行初始化,这些方法在更确定的时间调用,比如...didLoad或applicationDidFinish...。
https://stackoverflow.com/questions/7092366
复制相似问题