3

私の多くではUIViewControllers、データの状態に基づいて特定のコントロールを更新しています。たとえば、UITableViewController1つ以上のアイテムがある場合にのみ有効にする必要がある編集ボタンがあるとします。または、追加できるアイテムの数を制限し、それ以外の場合は[追加]ボタンを無効にしたい場合があります。

アイテムを追加または削除する(またはアイテムを追加/削除できるその他のアクションを実行する)たびに、有効化/無効化が必要になる可能性のあるコントロールを更新することを忘れないでください。これはほとんどの場合些細なことですが、快適ではありません。繰り返しが多くupdateControlEnabled、データに影響を与える可能性のある新しい機能を追加するたびに、呼び出しを(または何でも)追加することを忘れないでください。

そして、NSManagedObjectContextObjectsDidChangeNotificationに気づきました。ドキュメントを読むと、管理対象オブジェクトのコンテキストで何かが変更されるたびに通知を受け取ることができるようです。これは理想的なようですが、いくつか質問があります。

  1. これはNSManagedObjectContextObjectsDidChangeNotificationの適切な使用法ですか?

  2. コントローラがこれらをサブスクライブし、それぞれを解析してUIを更新する必要があるかどうかを確認する場合、パフォーマンスへの影響を予測する必要がありますか?気になることがわかっている変更だけでなく、すべての変更についてuserInfoをチェックします。

  3. 通知はどこで購読する必要がありますか?私UIViewControllerはコンテキストへの参照を持っていますが、これは役立ちますが、View Controllerが常に1つだけのサブスクリプションを持つように、サブスクライブする場所(loadView?viewDidLoad?init?)がわかりません。
  4. ビューコントローラは、画面外にあるときも通知を受信して​​処理し続けます。データモデルが他の場所から影響を受けるため、コントロールを有効または無効にします。これでいい?

他の誰かがこのアプローチを使用しているかどうか、もしそうなら、彼らの経験は何であるか、私はほとんど疑問に思っていると思います。

4

1 に答える 1

2

Q)これはNSManagedObjectContextObjectsDidChangeNotificationの適切な使用法ですか?

A)はい-OSXでも同様の目的で使用しました。

Q)コントローラーがこれらをサブスクライブし、それぞれを解析してUIを更新する必要があるかどうかを確認する場合、パフォーマンスへの影響を予測する必要がありますか?気になることがわかっている変更だけでなく、すべての変更についてuserInfoをチェックします。

A)いいえ-通常は非常に小さなオブジェクトのセットです-直接変更されたものです。

Q)通知はどこで購読する必要がありますか?私のUIViewControllerにはコンテキストへの参照があり、これは役立ちますが、View Controllerが常に1つだけのサブスクリプションを持つように、サブスクライブする場所(loadView?viewDidLoad?init?)がわかりません。

A)ええと、ビューが表示されるまでUIに影響を与えることはできません。したがって、おそらくviewDidLoadまたはviewWillAppearです。後者の問題は、プッシュ/ポップによっては数回取得される可能性があるため、viewDidLoadで実行する可能性があります。

Q)View Controllerは、画面外にあるときも通知を受信して​​処理し続けます。データモデルが他の場所から影響を受けるため、コントロールを有効または無効にします。これでいい?

A)もちろん-ビューが再表示されると、すべての要素が正しく設定されます。

あなたがしたいのは、その通知の古典的な使用法です。入ってくるスレッドを確認するだけです。mainThreadでない場合は、mainThreadに投稿されたブロックですべての変更を行います。

于 2012-09-16T17:36:59.763 に答える