![](/img/trans.png)
[英]How to send clicked item of Table View to other view controller when datasource and delegate are separate from View Controller
[英]Send array from 1 view controller to 2 other separate view controllers
我在一个视图控制器中有一个数组,想要发送给其他两个视图控制器-我正在通过prepareForSegue:
var userId = ""
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let FollowersUsersViewController = segue.destination as! FollowersUsersViewController
FollowersUsersViewController.followersUserId = userId
let FollowingUsersViewController = segue.destination as! FollowingUsersViewController
FollowingUsersViewController.followingUserId = userId
}
对于其他2个视图控制器,我这样调用数组:
视图控制器1:
var followersUserId = String()
let followersProfileId = followersUserId
查看控制器2:
var followingUserId = String()
let followingProfileId = followingUserId
当我将其发送到视图控制器之一(并注释掉另一个)时,它似乎可以工作,但是当我运行该应用程序时,只有一个按钮可以工作。 当我对两个视图控制器都执行此操作时(如上所述),我得到了Thread 1: signal SIGABRT
错误-两者如何工作?
感谢任何帮助:)
这是崩溃的,因为您尝试投射错误的视图控制器。 那是在单次迭代中segue.destination
要么FollowersUsersViewController
或FollowingUsersViewController
。
您已在使用前有条件地对其进行了铸造。
试试这个代码
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let controller = segue.destination as? FollowersUsersViewController {
controller.followingUserId = userId
} else if let controller = segue.destination as? FollowingUsersViewController {
controller.followingUserId = userId
}
}
可以改进此代码的一件事是使两个VC都符合强制该变量存在的协议:
protocol UserIdController {
var userId: UUID { get set }
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let viewController = segue.destination as? UserIdController {
viewController.userId = userId
}
}
它的描述性会降低,但会更加优雅和快捷。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.