委托方法 Swift 无法正常工作

Delegate Method Swift not working correctly

我正在尝试让我的视图控制器相互通信并传递可以相互更改的值。在这种特殊情况下,我试图将一个值从第一个控制器传递到第二个控制器,更改第二个控制器中的值,然后将值从第二个控制器传递回第一个控制器。我可以执行第 1 步和第 2 步,但是第 3 步不起作用,当我尝试获取更改后的值时,它在到达 viewDidLoad() 时没有更改。这是示例代码:

//first controller
class OpenViewController: UIViewController, UpdateDelegate {
    var text: String!

    func save(controller: ViewController, text2: String) {
            text = text2//set the new value of text to text2
            controller.navigationController?.popViewControllerAnimated(true)
            println(text)
        }


    override func viewDidLoad() {
        super.viewDidLoad()
        if(text.isEmpty) { //if text is empty set value to hi
            text = "hi"
        }
        else{
            print(text)
        }
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
            if segue.identifier == "ToList" {
                var vc = segue.destinationViewController as! ViewController
                vc.text2 = text
                vc.delegate = self

            }
        }

    }
}

//second controller
protocol UpdateDelegate{
    func save(controller: ViewController, text2: String)
}

class ViewController: UIViewController {
    var delegate: UpdateDelegate? = nil
    var text2: String!
    @IBAction func home(sender: AnyObject) { //button click to go back to first view controller
        delegate!.save(self, text2: String) //save the updated value into first view controller
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        self.text2 = text! //set value of text2 to the  value of text from previous view controller
        self.text2 = "bye"//change text2 value to "bye"
    }
}

打印语句用于检查它是否按预期工作。保存函数中的 println(text) 实际上显示 text 的值已更改为 text2,但是当它到达 OpenViewController 中的 viewDidLoad() 时,text 现在再次为空。我对 with delegate 的印象是,OpenViewController 中文本的值将是 ViewController.

中的文本 2

一般来说,您可能不想让 ViewController 直接相互对话。

您想要的是长期存在且两个 ViewController 都可以与之通信的第三个实体。我们暂时将此称为 TextManager。

因此 OpenViewController 调用 TextManager 来设置其他 UIViewController 可能需要的文本。然后您的第二个 UIViewController 也可以与 TextManager 对话以检索文本。同样,它可以将第一个 viewController 可以读取的更改发送到 TextManager。

UIViewController 不会存在很长时间 - 它们来来去去。所以你需要第三件事来处理你长期存在的数据。