2016-11-24 3 views
1

私はSwiftを使用している新しいプログラマです。 私のプロジェクトでは、私はcoredataとたくさんのView Controllerを使用しています。ViewControllerのナビゲーションの更新 - Coredats

私は、このビューコントローラを持っている:

Viewcontroller1は私の家のViewController(VC1)を持っています。 Viewcontroller2(VC2)、(テーブルビューで)私のcoredataからリロードされた項目のリスト。 Viewcontroller2(VC3)は、VC2で選択された項目の属性をリストします。 Viewcontroller2(VC4)は、VC2で選択された項目の属性を編集します。

これは私のナビゲーションです:VC1 - > VC2 - > VC3 - > VC4

問題: 私はVC1におり、VC2に行くと言います。 ビューコントローラからアイテムを選択すると、VC3に移動します(私はVC3を押します)。 私は今アイテムの特性になっています。それらはcoredataからリストされています。 それらを編集するために、私は、ユーザーが選択したアイテムの値を変更することができるビューを作成したボタン、セグ、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

これは、viewWillAppearまたはオブザーバからデータソースを更新し、次にtableview.reloadData()を呼び出す必要があるテーブルビューを持っているようですが、 – AMAN77

+0

ですが、VC4またはVC3のテーブルビューはありません。 VC2にはテーブルビューしかありません。それで私がVC4からVC3に来るときにそれがなぜ更新されないのですか?私はVC3をポップし、上のコードはVC3の上で、関数viewWillAppear(_ animated:Bool)にあります。いいえ?私は結果のために再度フェッチしています... –

関連する問題