objective-c - 如何从 SourceViewController 访问 DetailViewController 方法;都在 NSSplitViewController (Objective-C) 中
问题描述
我是 Objective-C 的新手,觉得学习很重要。我给了自己以下挑战:
我有一个 NSSplitViewController 设置,每个视图有两个类;(i) SourceViewController:NSViewController 和 (ii) DetailViewController:NSViewController。
通过选择 SourceViewController 的 NSTableView 行,我想更改 SourceViewController 内 ImageView 中的图像
我在 DetailViewController 中有一个实例类方法,我试图从 SourceViewController 访问它:
-(void) imageSelected: (NSString*) name{
self.imageView.image = [NSImage imageNamed:name];
}
为了获得访问权限,我通过 NSSplitViewController 超类创建了一个指向 DetailViewController 类实例的指针。所以我上树再下到 DetailViewController:
//gets the row number that was selected
-(void) tableViewSelectionDidChange:(NSNotification *)notification{
NSLog(@"%ld",[[notification object] selectedRow]);
NSInteger row = [[notification object] selectedRow];
//get access to the parent view controller
//NSSplitViewController *splitCV = self.parentViewController;
NSSplitViewController *splitCV = ((NSSplitViewController *)self.parentViewController);
NSViewController *imageVC = splitCV.childViewControllers[1];
NSLog(@"%@",imageVC.className); //detail view controller
//***** HERE'S THE PROBLEM******
imageVC.imageSelected(self.pictures[row]); //<- imageSelect isn't recognised
}
但是,这不起作用,因为自动完成无法识别 imageVC 指向的函数。打印 imageVC.className 输出,显示名称是“DetailViewController”。
我做错了什么,我该如何解决?
提前致谢
解决方案
你可以尝试改变这个:
NSViewController *imageVC = splitCV.childViewControllers[1];
进入这个:
DetailViewController *imageVC = splitCV.childViewControllers[1];
看看 imageVC.imageSelected(self.pictures[row]) 现在是否正确自动完成?
推荐阅读
- spring - Log4j2 未从 EAR 中的外部类路径加载
- jackson - 钥匙斗篷。使用 Admin API 放置 RealmRepresentation 给出“没有字符串参数构造函数/工厂方法来反序列化字符串值”
- sql - 使用子查询查找给定日期最大值的行
- php - 用 curl 在 html 中找到每一个
- r - 如何针对两个变量聚合/group_by?
- c++ - OpenCV - 如何在灰度图像上应用 Kmeans?
- excel - VBScript:Workbooks.Open - 不打开电子表格
- google-bigquery - BigQuery 脚本中的条件逻辑
- c - 用 C 编写 Vigenere 密码(保留空格)
- excel - Excel VBA 根据另一张纸上的列表检查单元格的值(前 3 个字符)