CoreData を使用してスキーマを設計することから始めます。IMO、CoreData を使用して開始することをお勧めします。これは、アプリが単純なオブジェクトまたは 2 つを超えてスケーリングされた場合に、データ レイヤーを CoreData に変換する必要がないためです。
もう 1 つのルートは、データを返す Web サービスを作成することです...そのため、サービスを呼び出すだけで、ユーザー オブジェクトのコレクションが返されます。オブジェクト グラフ全体を質問とともに送信するか、別のサービスを作成して、特定のユーザーに一連の質問を返すことができます。Web サーバーが手元にある場合、この方法は、システムに新しい質問を取得するためにアプリの更新に依存する必要がないため、最も適しています。私は引き続き CoreData を使用して結果をキャッシュします...そのため、同じ情報を常にダウンロードすることはありません。
そのため、CoreData オブジェクトへのアクセスに関しては、シングルトンであるリポジトリ クラスを使用します。これにより、任意のビュー コントローラーがリポジトリのインスタンスを取得してデータを取得することが容易になります。そのようなものは次のようになります。
[[Repository defaultRepository] findFirst:[User class]
where:@"name == 'John'"]
データを取得するための冗長なコードがたくさんあるので、それをオブジェクトにまとめると、述語や並べ替えなどの厄介なコードをビュー コントローラーから取り除くのに役立ちます。where 句で va_list を利用している場所がわかるので、その文字列を述語に直接挿入できます。実装できる他の方法を次に示します。
- (NSArray *) findAll:(Class)entity
sortByKey:(NSString *)key
ascending:(BOOL)ascending;
- (NSArray *) findAll:(Class)entity
sortByKey:(NSString *)key
ascending:(BOOL)ascending
where:(NSString *)format, ...;
- (id) findFirst:(Class)entity
where:(NSString *)format, ...;
これが好ましい方法かどうかはわかりませんが、私はこの方法で多くの成功を収めてきました。お役に立てれば!