回到UINavigationController时是否有类似prepareForSegue的东西?

时间:2015-12-14 18:27:34

标签: ios swift segue unwind-segue

我的ViewOne中有一个数组,我使用ViewTwo函数传递给prepareForSegue

当我在ViewTwo中删除数组的数据并返回NavigationController上的后退按钮或向右滑动时,ViewOne中的数组仍然包含所有数据但不知道我删除了一些东西。

这个问题有解决办法吗?

ViewOne:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if(segue.identifier == "submitSegue") {
            let shoppingCart = segue.destinationViewController as! ShoppinCartScreen;
            if(artikel != nil) {
                shoppingCart.alleArtikel = alleArtikel
                print("Test: \(artikel?.artikelnummer)")
            }
        }
    }

ViewTwo:

var alleArtikel = [Artikel]()

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return alleArtikel.count
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("ShoppingCartScreenCell", forIndexPath: indexPath) as!ShoppingCartScreenCell
        let eintrag = alleArtikel[indexPath.row]
        cell.previewImage.image = eintrag.foto
        cell.artikelNummer.text = eintrag.artikelnummer
        return cell
    }

    override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
        if(editingStyle == .Delete) {
            alleArtikel.removeAtIndex(indexPath.row)
            tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
        }
    }

我有一个主视图(ViewOne)和一个TableView(ViewTwo)。

2 个答案:

答案 0 :(得分:0)

在Swift中,数组是值类型而不是引用类型(请参阅Apple Developer Blog entry),因此当您通过'它来查看2你真的只是制作副本。 View2修改副本但原始文件保持不变。

答案 1 :(得分:0)

在返回时不使用prepareForSegue方法,而我无法知道,只需运行viewWillDisappear函数即可。基本上这是视图消失时的viewDidLoad函数。当您离开视图时,它将在您执行segue时运行。

示例:

override func viewWillDisappear(animated: Bool)
{
    super.viewWillDisappear(animated)
    print("the view is hidden")
}