0

プロファイル画面の場合、最初にテーブルをロードすることなく、Core Data から詳細ページに相当するものをロードしたいと考えています。コア データに複数のユーザーのエンティティ/テーブルがあります。しかし、私が関心があるのは、そのうちの 1 つである現在のユーザーのプロファイル データを取得することだけです。テーブルをロードして選択を選択し、パスとインデックス行などを使用するプロセスを経ずに、それを直接ロードしたいと思います。結果を取得したら、それらを行として表示するのではなく、異なるフィールドを分散させたくありません詳細ページで行うように、さまざまな要素でページを囲みます。

誰でもこれを行うための最良の方法を提案できますか?

問題のユーザーをユーザーIDまたはユーザー名でソートする述語を使用する必要があると思います。通常は NSFetchedResultsController を使用してフェッチを実行しますが、executefetchrequest を使用してより簡単なフェッチを行う方法があるかもしれません。次のコードは、SO で見つけたものを基にしています。それは正しいアプローチですか?

 - (User *)userInfo:(NSDictionary *)usersList
            inManagedObjectContext:(NSManagedObjectContext *)context
{
    User *user = nil;

    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Users"];
    request.predicate = [NSPredicate predicateWithFormat:@"username = bob"];
    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"last" ascending:YES];
    request.sortDescriptors = [NSArray arrayWithObject:sortDescriptor];

    NSError *error = nil;

    NSArray *matches = [context executeFetchRequest:request error:&error];

    if (!matches || ([matches count] > 1)) {
        // handle error
    }  else {
        user = [matches lastObject];
    }

    return user;
}
4

1 に答える 1

0

コードの何が問題になっていますか? それは何をしませんか?

あなたの説明に基づいて、あなたが提供したコードはあなたが求めていることを正確に行います。

テーブルのロードに関するコメントについては、テーブルをロードすることはありません。Core Data はオブジェクト モデル設計です。SQLiteに永続化するように構成しても、「テーブルをロードする」ことはありません。オブジェクトのグループをロードしています。

コア データを ORM のように扱うと、後でさらに設計上の問題が発生します。これは ORM ではなくオブジェクト グラフです。

直接のエラーは、メソッドを呼び出すための構文がありません。[self userInfo:??] を使用して viewDidLoad で呼び出そうとしています。inManagedObjectContext:(NSManagedObjectContext *)context ですが、何を ?? として含めるかわかりません。しかし、それを機能させようと夢中になる前に、これが正しいアプローチであるかどうかを知りたかったのです。それを聞いてうれしいです。メソッドの呼び出し方法を教えてください。私たちが実際にここで呼んでいる辞書が何なのか、私は曖昧です。

メソッドはあなたが定義したものです。その辞書に何を含めたいですか? これは Core Data API の一部ではなく、View Controller の一部です。

このメソッドのコードはかなり標準的です。Core Data に対する単純なフェッチ。

このメソッドを作成していない場合は、作成した人に尋ねることをお勧めします。

参考までに、その辞書の何も述語で使用されていません。これはたまたま宿題になるのでしょうか?

于 2015-05-23T16:05:04.680 に答える