View Controller Aはモデルにアクセスでき、モデルを変更することができます。 View Controller Bはモデルを表示します。 View Controller Aがモデルを更新するときに、ビューが更新されるようにView Controller Bでトリガーされるメソッドが必要です。 Swiftでこれを行う標準的な方法はありますか?モデルを更新して、別のコントローラで迅速に更新をトリガする方法
0
A
答えて
2
この変数の通知では通知を送信でき、他のコントローラはこの通知に登録できます。
0
モデルオブジェクトをObjective-Cオブジェクト(@objc
)にすると、KVO(キー値オブザーバリング)を使用してモデルオブジェクトの変更を観察することができます。これを行うと、そのプロパティが変更されたときにモデルのプロパティを監視しているオブジェクトに通知が送られます。
0
これはあなたがこれを行う方法の1つです。
ビューコントローラBが使用できるプロトコルを実装するクラス、構造体を使用してください。ビューコントローラBは、モデルが何であるかを気にする必要はなく、必要なプロトコル必要なデータを抽出します。
ビューコントローラAがモデルを操作するとき、userInfoディクショナリに、プロトコルのインスタンスとしてモデルへの参照を含む通知を投稿します。ビューコントローラBは、通知を購読し、トリガされると、userInfoから参照を抽出し、共通プロトコルを介して必要なデータを取得します。
0
2つのビューコントローラ間で通信するもう1つの方法は、プロトコルです。
weak var updatedProtocol: viewControllerAModelDidUpdate?
モデルが更新され、呼び出している場合:
updatedProtocol?.viewControllerAModelDidUpdate()
をViewControllerBにおいて、プロトコルを実装
ViewControllerAでprotocol ViewControllerAModelProtocol: class {
func viewControllerAModelDidUpdate()
}
は、デリゲート型を定義:のようなプロトコルを定義します:
class ViewControllerB: UIViewController, ViewControllerAModelProtocol {
func viewControllerAModelDidUpdate() {
// reloadData()
}
}
ViewControllerBが提示されるまたは示さViewControllerAにより、BにAのupdatedProtocolに設定されている場合:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let b = segue.destination as? ViewControllerAModelProtocol {
self.updatedProtocol = b
}
}
関連する問題
- 1. クラウドキットのレコードを迅速に更新する方法は?
- 2. 迅速更新制約プログラム
- 3. 迅速に最新のalertviewのタイトルを更新するには?
- 4. 迅速にSqliteManagerを使用してテーブルを更新する方法
- 5. ページの更新時にコントローラのモデルを取得する方法
- 6. 迅速にHealthkitの高さを取得し更新する方法は?
- 7. ActiveAdmin:作成/更新後に別のモデルを更新する
- 8. 別のコントローラの内部からモデルを更新する
- 9. MVCでモデルを更新する方法
- 10. 更新別の減速
- 11. 迅速にタイマー間隔を更新するには?
- 12. トリガが別のテーブルを更新することをNHibernateに伝える方法?
- 13. Odataモデルを更新する方法
- 14. DataContextにモデルを接続してデータベースを更新する方法
- 15. Sequelize、別のモデルの関連モデルの更新方法
- 16. 編集方法を変更して両方のモデルを更新する
- 17. 更新パネル他の更新パネルの進捗インジケータをトリガする?
- 18. 迅速nsTimerコアデータ項目を更新する
- 19. レールで1つのフォームを使用して別のモデルを作成中にモデルを更新する方法
- 20. 別のテーブルの行を更新するトリガを書き込む方法は?
- 21. CRM 4.0で更新メッセージをプログラムでトリガする方法
- 22. Rails after_createコールバックを使用して別のモデルを更新する
- 23. 挿入/更新トリガをデバッグして値の挿入/更新を表示する方法
- 24. チェックボックスを使用してモデルを更新する方法Laravel?
- 25. トリガを使用して別のテーブルに更新前の値を設定する
- 26. プログラムで「更新」ボタンをトリガする方法 - WooCommerce
- 27. Visual Studio 2010でトリガを更新する
- 28. 挿入トリガまたは更新トリガでストアドプロシージャをトリガする
- 29. 同じコントローラのすべてのインスタンスを更新する方法
- 30. 複数のコントローラ間でオブジェクト/モデルを更新する
マイモデルは、クラスまたは構造体のいずれかとして表すことができます。構造体の場合、2つのコントローラは同じ参照を共有できません。通知の上に構造体を渡す必要がありますか?それがクラスなら、どのようにしてdidSetを追加できますか? (これは、クラスの "mutating"に似たような印象を与えているようには見えないからです)。あるいは、モデルを所有しているビューコントローラではなくモデルの内部で作成する必要がありますか? – Puzzler3141
サブプロパティの変更を通知する場合は、構造体を使用する必要がありますが、あなたが言ったように共有しませんが、クラスではすべてのプロパティdidSetに書き込む必要があります。 –