2015-12-14 105 views
1

我在我的ViewOne中有一個數組,我使用prepareForSegue函數傳遞給ViewTwo當用UINavigationController返回時,是否有像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)。

+0

首先,你真的需要表現出一定的代碼。你使用的是一個tableview嗎?你如何將數據保存在ViewTwo的數組中?如果你正在使用tableview,你是否正在執行tableview刷新? – MwcsMac

+0

如果ViewOne是一個tableview - 你應該刷新它,或者你可以閱讀有關Unwind segues。 – Oleshko

+0

我已經添加了一些代碼,希望它能幫助你來幫助我。在我的ViewTwo中,我使用了一個TableView。不,我沒有執行tableview刷新。 – user3653164

回答

0

在Swift中,數組是值類型而不是引用類型(請參閱Apple Developer Blog entry),所以當您將它傳遞給view2時,您實際上只是在製作副本。 View2修改副本,但原稿保持不變。

+0

swift中是否有任何引用類型的數組? – user3653164

+0

@ user3653164對象是引用類型 - 所以你可以將你的數據封裝到一個類中,並將引用傳遞給它 - 但還有其他方法,這取決於你想實現的目標。 –

+0

@ user3653164通常我會盡量避免在視圖控制器中存儲數據。將數據存儲在其他對象中,並根據需要在視圖控制器之間傳遞對這些對象的引用。 –

0

而不是在回去時使用prepareForSegue方法,但據我所知,只需運行viewWillDisappear函數。基本上這是視圖消失時的viewDidLoad函數。當你離開視圖時,它會在你正在執行一個循環時運行。

例如:

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

但是,在ViewTwo中使用viewWillDisappear時,如何更改ViewOne中的數組?在我從ViewTwo返回到ViewOne後,我想製作像這樣的'ViewOne.array = ViewTwo.array'。 – user3653164

相關問題