SWIFT-从第二个ViewController返回时进行变量重置

时间:2018-09-13 20:43:45

标签: swift uiviewcontroller segue

我已经在这里和Google上搜索了几个小时,但仍然找不到答案。一切都指向将变量从VC传递到另一个变量,而不是如何使变量在VC上保持活动状态。

我可以使用多种方法(例如单例)将变量从VC传递给另一个VC,但是当我从第二个VC转到主VC时,我仍然面临相同的问题。

例如,您有一个带有标签和2个按钮的主VC。当您单击按钮之一时,标签文本将更改,然后单击第二个按钮以Segue到第二个VC。然后,当您回到第一个VC时,就会出现问题:将标签重置为其初始文本“ label”。为什么?

我尝试在单独的swift文件中使用全局变量。我对自己说很好,该值存储在另一个快捷文件中,没有理由重置标签的值..但是它仍在重置。

非常感谢。

视频示例:https://youtu.be/Wx5blkQqU7E

非常基本的示例:

varTest.swift

import Foundation

var myVar2: String!

主ViewController

import UIKit

class ViewController: UIViewController {

    @IBOutlet var mylabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func dsfg(_ sender: UIButton) {

        performSegue(withIdentifier: "switchForm", sender: self)
    }

    @IBAction func changeLabeltext(_ sender: UIButton) {


        myVar2 = "Good."
        mylabel.text = myVar2

    }
}

第二个ViewController

import UIKit

class ViewController2: UIViewController {


    override func viewDidLoad() {
        super.viewDidLoad()

    }

    @IBAction func btnPrint(_ sender: UIButton) {

        performSegue(withIdentifier: "returnForm", sender: self)
    }
}

1 个答案:

答案 0 :(得分:1)

“执行Segue”时, ViewController 类中的值将重置-请勿使用segue。

或者:您提到您尝试在单独的swift文件中使用全局变量。请使用存储在客户端的临时文件代替。

使用以下功能创建文件并写入文件:

//This OVERWRITES already existing files!
func createFileinDocumentDirectory(filename: String){
    let blank = ""
    if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {
        let fileURL = dir.appendingPathComponent(filename)
        do {
            try blank.write(to: fileURL, atomically: false, encoding: .utf8)
        }
        catch let error as NSError {
            print("Ooooops! Something went wrong: \(error)")
        }
    }
}

func writeToFileInDocumentDirectory(filename: String, textToAdd: String){
    do {
        let dir: URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last! as URL
        let url = dir.appendingPathComponent(filename)
        try textToAdd.appendLineToURL(fileURL: url as URL)
    }
    catch {
        print("Could not write to file")
    }
}