将数据传递给 "unknown" viewcontroller

Passing data to "unknown" viewcontroller

我有很多 viewcontroller,分布在许多情节提要中。

在只知道 viewcontroller 标识符的情况下,是否有任何方法可以将数据传递给 viewcontroller。

viewcontroller 标识符和故事板名称是从 plist 中读取的,viewcontroller 是这样加载的:

let storyboard = UIStoryboard(name: plistdata.storyboard, bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: menuItem.identifier)
navigationController?.pushViewController(vc, animated: true)

由于我无法将 viewcontroller 转换为正确的 class,因此我无法设置数据。 class 可以从字符串中转换出来吗,比如

let vc = storyboard.instantiateViewController(withIdentifier: menuItem.identifier) as! ClassFromString("MyDestinationViewController")

或者让数据模型跟踪正在推送的 viewcontroller 并在加载后立即在目标 viewcontroller 中获取必要数据是否是更好的方法?

当您不知道某物的 class,但无论如何您都希望能够与其对话时,这就是协议的用途。如果你的每个匿名视图控制器 classes 都采用 MyProtocol,并且如果 MyProtocol 需要一个 takeData 方法,那么你可以将 vc 转换为 MyProtocol 并调用 takeData 没有有关 class 这个视图控制器是什么的更多信息。

我认为最好的方法是 Segue...因为 Segue 为您的 ViewController 制作数组,因此很容易推送、弹出和发送数据。