2016-11-24 52 views
1

我是一個使用Swift的新程序員。 在我的項目中,我正在使用coredata和許多視圖控制器。在Viewcontrollers更新導航 - Coredats

我有這樣的視圖控制器:

Viewcontroller1有我家的viewController(VC1)。 Viewcontroller2(VC2),帶有從我的coredata重新加載的項目列表(在表格視圖中)。 Viewcontroller2(VC3)列出VC2中所選項目的屬性。 Viewcontroller2(VC4),使用戶編輯VC2中所選項目的屬性。

所以這是我的導航:VC1 - > VC2 - > VC3 - > VC4。

問題: 可以說我在VC1並轉到VC2。 我現在從視圖控制器中選擇一個項目,它將我帶到VC3(我推VC3)。 我現在在項目特徵。從coredata列出。 爲了編輯它們,我製作了一個按鈕,帶一個segue,VC4,我在這裏查看了用戶可以更改選定項目的值。一旦用戶引入了文本字段的任何變化,我做了NSFetchRequest,並更新值是這樣的:

@IBAction func saveButton(_ sender: UIBarButtonItem) { 

    let app = UIApplication.shared.delegate as! AppDelegate 
    let context = app.persistentContainer.viewContext 
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Simulator") 

    do { 

     let results = try context.fetch(request) 

     if results.count > 0 { 

      for result in results as! [NSManagedObject] { 

       result.setValue(designLabel.text, forKey: "designation") 
       result.setValue(typeLabel.text, forKey: "type") 
       result.setValue(localLabel.text, forKey: "local")  
       do { 
        try context.save() 
       } catch { 
        print("Error updating") 
       } 


      } 
     } 
    } catch { 

     print ("Error") 
    } 
    _ = self.navigationController?.popViewController(animated: true) 

} 

所以,現在,按saveButton我更新本地,名稱和類型atributes,而且比流行VC3。 現在在VC3中,我期望收到更新值。相反,我正在接受舊的價值觀。這是我在VC3中有:

override func viewWillAppear(_ animated: Bool) { 

    super.viewDidAppear(animated) 

    map.delegate = self 

    let fetchRequest:NSFetchRequest<Simulator> = Simulator.fetchRequest() 

    do{ 
     let searchResults = try DatabaseController.getContext().fetch(fetchRequest) 

     for result in searchResults as [Simulator]{ 

      if (String(describing: result.objectID) == choosenID) 
      { 
       self.title = result.designation 
       localLabel.text = "Local: \(result.local!)" 
       typeLabel.text = "Type: \(result.type!) 
       print("I found it") //to check if I go inside this = and I go inside (true) 

      { 
     } 
    } 
    catch{ 
     print("Error: \(error)") 
    } 

    }  
} 

現在我按下後退按鈕,我去VC2:有些事情。該單元在標籤上的名稱仍未更新。 所以我去VC!使用後退按鈕。 現在,如果我向前移動到VC2或VC3,一切都會更新。

這是怎麼回事?爲什麼當我從VC4彈出到VC3時不更新?

+0

當你回去時,你有沒有嘗試重新加載數據? – AMAN77

+0

我想我知道爲什麼。我不更新數據,我應該... –

回答

1

當你回去時你會回到原來的樣子,當你向前走時你正在重新裝載它。你可以做的是當你回去時重新加載數據。

+0

我明白了。我怎樣才能做到這一點?你能告訴我嗎? –

+0

好吧,聽起來你有一個tableview,你需要更新viewWillAppear或觀察員的數據源,然後調用tableview.reloadData() – AMAN77

+0

但我沒有任何VC4或VC3的tableview。我只在VC2中有表格視圖。那麼爲什麼我在VC4到VC3的時候更新呢?我彈出VC3,我有VC3上面的代碼,在func viewWillAppear(_ animated:Bool)中。它不應該工作?我再次獲取結果... –