所以我有一个视图控制器A,它以模态方式呈现视图控制器B.当B出现时,A被设置为B的委托。 B顶部有两个按钮:完成和取消。两个都打电话
dismissViewControllerAnimated(true, completion: nil)
但是Done还调用了一个委托方法,它将一些信息存储在A中的数组中。一切都很好,除了当我回到B中,其中一些东西已经存储到前一个Done单击的数组中,然后单击取消相反,这次将数组初始化为默认的空状态。
如何在保持该阵列的现有状态的同时解除B?感谢。
抱歉 - 意识到几乎不可能想象我所描述的内容,所以这里是代码的要点:
class A: UIViewController, BProtocol {
var array: [User] = []
func viewDidLoad() {
...
}
func BProtocolFunction(newArray) {
array = newArray
}
func prepareForSegue() {
...
B.delegate = self
}
}
class B: UIViewController {
var delegate: BProtocol?
// Works great, copies this new array to the array in A. However,
// if you go BACK into this modal, and then click cancel, that
// array is reset
func doneButtonClicked() {
delegate.BProtocolFunction(newArray)
dismissViewControllerAnimated(...)
}
// So if the user clicks cancel, the modal is dismissed
// but the array is reset to []
func cancelButtonClicked() {
dismissViewControllerAnimated(...)
}
}
总结一下:用户从A到B. B以模态呈现。在B中,他们做了一些事情,然后单击Done并调用一个委托方法来更改A中的数组,并且模态被解除。之后,如果它们返回到B,然后单击取消 - 阵列将重置为[]。我希望它从第一次完成点击中保留数组。
答案 0 :(得分:0)
代码中某处必定存在错误。
根据您发布的代码判断,您的数组无法重置为零,因为您的cancelButtonClicked不会触发任何委托
我的猜测是: