【问题标题】:Objective-C passing values from NSViewObjective-C 从 NSView 传递值
【发布时间】:2017-09-28 13:55:20
【问题描述】:

我是 Objective-C 的新手,我正在努力寻找将 NSArray 值从一个 NSView 传递到另一个 NSView 的正确方法。我的代码如下所示:

NSViewOne:

NSLog(@"%@", arrayValues); // 10, 20, 30
NSViewTwo *displayValues = [[NSViewTwo alloc] init];
[displayValues showValuesFromOne:arrayValues];

NSViewTwo:

- (void)showValuesFromOne:(NSArray *)sender {
     NSArray *arrayValues = sender;
     NSLog(@"%@", arrayValues);
}

在 NSViewOne 中显示数组值,在 NSViewTwo 中我得到 (null)。

【问题讨论】:

  • 第二个视图是在 xib 还是故事板中?如果是,则在第一个 sn-p 中创建的视图是一个完全不同的实例。顺便说一句:getValues 对于实际上设置某些东西的方法来说是一个令人困惑的名称。
  • @vadian:两个 NSView 都是两个文件中的独立类,它们显示在 .nib 窗口 (osx) 中。我也重命名了这些方法以减少混乱。
  • 然后您需要实际引用来查看 .nib 中的视图 2,例如使用 IBOutlet。 [[NSViewTwo alloc] init] 创建一个新的(不同的)实例。
  • @vadian:如果我只是想将一个值传递给 NSViewTwo 中的一个方法,但那不是它稍后使用的 gui 的一部分呢?

标签: objective-c xcode nsarray sender


【解决方案1】:

有一个误解:

首先,操作方法是从 GUI 到代码的入口点,而不是出口点。传递的值始终是发送者。您可以使用代码中的操作方法,但这很少有用。所以-showValuesFromOne: 一点意义都没有。

其次,将值从一个视图传递到另一个视图是不常见的。 View 与控制器通信,反之亦然。因此视图 1 中的代码应该在控制器中并由视图 1 执行。然后调用的控制器代码将值推送到视图 2。为此不要使用操作方法,而是使用简单的方法。

控制器加载两个 nib,因此对两个视图都有出口。因此对于控制器来说,很容易与两个视图进行通信。丝线在他手中汇聚。

【讨论】:

  • 但我使用的是void,而不是IBAction。我只需要将“a”(值)-> x 转换为“b”(值)-> x。
  • IBAction 是什么?但是,数组不是发送者。
  • 我认为 IBAction 将与 IBOutlet 一起使用,但这只是猜测。如果 NSArrary 不是发件人,那是什么?谢谢。
  • 这是一个普通的论点。您阅读了哪个 Cocoa 开发简介?
猜你喜欢
  • 2019-01-02
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 2012-07-29
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多