2

私はSOを検索して、ViewController間でデータを共有するさまざまな方法を探しました。データを返すための委任がpplが提案する最も一般的な方法であり、一部のpplは、アプリのどこからでも情報を利用できるようにするためにシングルトンを使用していることがわかります。私はまだCoreDataに精通していませんが、これまで見てきたことから、Core DataはManagedObjectContextからのデータにアクセスできるという点で、シングルトンに似ているようです。そのオブジェクトへの参照がある限り、そのデータにアクセスできます(その理解が間違っている場合は、遠慮なく訂正してください)。

このシナリオでは、委任またはシングルトンを使用する必要があるかどうか疑問に思いました。私は基本的に2つのタブを持つタブバーコントローラーを持っています。1つのタブは、委任を使用するか、表示するビューにプロパティを割り当てることで、ビュー間でデータをやり取りします。

2番目のタブは、最初のタブの概要ビューです。したがって、まったく異なるビューのスタックでは、タブ1にあったのと同じデータが必要です。そのシナリオでは、アプリのどこからでもアクセスできるようにシングルトンを使用する必要がありますか?または、より良い解決策はありますか?

また、アプリケーションが閉じられようとしている場合、データをアーカイブするために何をするのだろうかと思います。シングルトンを実装した場合、アプリがバックグラウンドに入るという通知を受け取ったときに、シングルトンを調べてデータを保存できるように思えます。ただし、シングルトンを使用しない場合、アプリがバックグラウンドに入ったときにデータを保存するにはどうすればよいですか。代わりに、その保存コードをアプリデリゲートに配置しますか?

最終的には、アプリ間でデータをアーカイブおよび共有するために、このシナリオでどのデザインパターンが優れているかを理解しようとしていると思います。ありがとう!

4

1 に答える 1

0

Core Dataに関するこの素晴らしいチュートリアルを実行しました:http: //timroadley.com/2012/02/09/core-data-basics-part-1-storyboards-delegation/

そこで使用されるアプローチは次のとおりです。ManagedObjectContextはAppDelegateで初めて初期化されます。次に、ルートビューコントローラで、appdelegateからManagedObjectContextを取得します。次に、prepareForSegueで、managedObjectContextをプッシュされたビューコントローラに渡します。

AppDelegateには、__ managedObjectContextの読み取り専用アクセサープロパティがあります。これは、このシングルトンオブジェクトを初めて作成する役割を果たします。

各ViewControllerで、コアデータから必要なエンティティを使用してviewWillAppearにfetchedResultsControllerを設定しました。次に、ユーザーが保存ボタンを押したときにコアデータに直接書き込みます。私の特定のアプリケーションでは、ユーザーが間違いを犯したり、編集可能なテキストデータを誤って消去したりする可能性があるため、明示的な[キャンセル]ボタンがあります。ただし、iOSの[設定]メニューのように、各コントロールの値が変更されるとすぐに変更を保持できます。データの性質上、キャンセル/保存のアプローチを好みます。オブジェクト全体を再保存する必要があるのか​​、CoreDataの個々のフィールドのみを更新できるのかを確認するための調査がいくつかあります。

managedObjectContextから直接読み取り/書き込みを行う場合、コアデータがほとんどの質問を処理します。データはすぐに保持され、すぐに更新されます。意図的に永続化されていないデータがある場合は、委任が画面間でデータを渡すための良い方法です。非永続データで知りたくない多数のビューコントローラに通知する必要がある場合は、オブジェクトまたはディクショナリでNSNotificationCenterを使用することを検討してください。
Objective-CのNSNotificationCenterを介してメッセージを送受信しますか?

于 2012-11-14T17:07:13.177 に答える