如何在 NSViewController 中重新加载数据?
Posted
技术标签:
【中文标题】如何在 NSViewController 中重新加载数据?【英文标题】:how to reload data in NSViewController? 【发布时间】:2013-04-03 16:08:08 【问题描述】:我正在尝试弄清楚如何在 NSViewController 中重新加载数据。
我有一个这样的项目,左侧栏是 NSOutlineView(由我的 outlineViewController 控制),右侧拆分视图是自定义视图:
所以我有这个“profile.xib”文件,其中包含“person”对象的一些信息。我已将 profile.xib 文件所有者设置为我的视图控制器 ProfileViewController,它是 NSViewController 的子类。
所以,每次当用户从侧边栏选择不同的配置文件时,我的 outlineviewController 都会调用:
if (!_profileViewController)
_profileViewController = [[ProfileViewController alloc] initWithNibName:@"profile" bundle:nil];
[_profileViewController setProfile: item]; //item is an instance of the profile object
NSView *view = [_profileViewController view];
view.frame = _mainContentView.bounds;
[view setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
[_mainContentView addSubview:view]; //add profile's view to the right hand side split view
(代码取自apple的sidebardemo)
由于用户可能从侧边栏中选择不同的配置文件,我需要在 ProfileViewController 中重新加载数据。但是我不知道哪个方法应该包含我的重新加载数据代码。如果我将我的“重新加载数据代码”放在 awakefromnib 中,它将被调用一次,viewload 也只会调用一次。由于内存问题,我不想在选择配置文件时重新分配和重新初始化 _profileViewController 的所有内容。
我不能在这里使用绑定,因为有些字段显示起来非常复杂。
那么我将如何重新加载数据?
【问题讨论】:
【参考方案1】:如何将“将配置文件信息加载到视图中”代码从 -awakeFromNib 移到它自己的 -reloadData 方法中,并在调用 -setProfile: 时调用它?您可以通过在表格视图中自己调用它或覆盖 -setProfile: 来记录配置文件,然后立即调用 -reloadData。
【讨论】:
以上是关于如何在 NSViewController 中重新加载数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何在基于 NSDocument 的 Cocoa 应用程序中使用 NSViewController
在 NSWindow 中呈现不同 NSViewController 的正确方法
如何从app delegate访问NSViewController?