objective-c - 从情节提要中的菜单选择将数据传递到表格视图控制器
问题描述
我正在尝试访问要在表格视图中显示的模型数据,以及如何从我的应用程序的另一部分将这些数据提供给视图控制器。我认为当保存数据的 MSMutableArray 是表视图控制器接口的一部分时,我对表视图的工作方式有了很好的理解。当我想显示的数据在其他地方初始化时,我开始变得有些困惑。
在我的应用程序中,我最终希望在表格视图中显示的数据是从 XML 文件中读取和处理的。就这个问题而言,它看起来像这样:
//
// bunchOfData.h
//
@interface bunchOfData : NSObject
@property (strong) Profile *overview;
@property (strong) NSMutableArray *info;
@end
数据挂在“bunchOfData”中,并在整个应用程序中用于各种任务。
我提供了一个菜单,允许用户在包含表格视图的新窗口中显示来自“信息”MSMutableArray 的数据。菜单是在情节提要中定义的,包含 NSTableView 的窗口也是如此,并且我已经按照您的预期将菜单项的 segue 连接到了窗口。
这是表视图控制器的标题:
//
// TableViewController.h
//
@interface TableViewController : NSViewController <NSTableViewDataSource> {
@private
IBOutlet NSTableView *tableView;
bunchOfData *data;
}
@end
来源:
@implementation TableViewController
- (id)init
{
self = [super init];
if (self)
data = // Hmmm.... I'd like to assign 'info' to this
return (self);
}
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
return [data.info count];
}
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
:
:
return [value for the object in the table];
}
@end
现在,如果我有点迷失,是如何获取对 bundleOfData.h 中的“信息”数组的引用到我的表视图控制器(如源文件中的“数据 =”占位符所述。
当包含表视图的窗口被通过情节提要连接到窗口的菜单打开时,如何使用对内部数据的引用来初始化表视图控制器?故事板似乎隐藏了很多必要的细节,我不确定如何找到这些细节。
谢谢!
解决方案
我相信将数据获取到视图控制器的正确方法是使用prepareForSegue:sender:
原始视图控制器中的函数。如果您在拥有菜单的视图控制器中实现此功能,它将在控制权转移到新视图控制器之前被调用。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.destinationViewController isKindOfClass:[TableViewController class]]) {
TableViewController *vc = (TableViewController *)segue.destinationViewController;
vc.data = info;
}
}
该if
声明是为了确保我们在正确的 segue 上运行。如果您有多个要向其传递数据的 segue,则可以添加多个if
- else if
-else if
以在同一函数中处理它们中的每一个。您可以检查 segue 的标识符,而不是检查视图控制器类。如果您有多个连接到具有相同类的视图控制器的 segue,这将很有用。标识符是在界面生成器的情节提要中设置的。
另一个值得一提的方便功能是shouldPerformSegueWithIdentifier:sender:
您可以使用它来取消转场。
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
if ([identifier isEqualToString:@"SegueA"] && !self.allValuesGood)
return NO;
return YES;
}
推荐阅读
- c - Gstreamer AudioSink 插件开发
- r - 在 R 中的矩阵列中获得多数票
- python - 如何使用 re 库或 Excel 工作表中的任何其他方法将字符串拆分为文本和数字?
- sql - SQL 返回分区中的最小值,但如果变为负数,则在第一个负值处停止
- r - 二进制运算符错误 R Studio 的非数字参数
- payment-gateway - Elavon Converge - emvchipsale 字段 ssl_tlv_enc
- php - 自动生成html页面
- php - 调试 SQL 中的错误 1064 以查看长 SQL 语句的失败原因
- multithreading - 时间片的价格是多少?
- javascript - 如何让弹出表单在 jQuery 中工作?