如何在 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

如何从 NSViewController 显示视图?

在 NSWindow 中呈现不同 NSViewController 的正确方法

如何从app delegate访问NSViewController?

如何在 NSApplicationDelegate 上加载 NSViewController

使用 NSViewController 加载 nib 后...如何访问 nib 中的 NSButton?