0

Core Data の 2 つのエンティティとの基本的な関係を設定したいと考えていますが、関係が保存されていないか、適切に機能していません。その理由がわかりません。

2 つのエンティティはCharacterAvatarであり、1 対 1 の関係です。キャラクターは 1 つのアバターを持つことができます。厳密には「1つのアバターを複数のキャラクターが所有できる」はずですが、それについては後述します。

キャラクターを追加してアバターを割り当てたい。

Core Data には既に 10 体のアバターと 1 体のキャラクターがあり、どちらも Terminal と SQLite で確認済みです。

問題は、「名前でアバターを見つけて、キャラクターとの関係を保存する」という問題を抱えていることです。

ここのところ、

「frqAvatarWithName」というフェッチリクエストを設定しました。ここで、述語は次の構造を持っています。

[見積もり]

名前 == $AVATAR_NAME

[/見積もり]

そうです。特定の名前のアバターを見つけることができます。そして、キャラクターとの関係を築くことができます。

問題 1:クエリを実行できますが、レコードの数が表示されません。

デバッグ モードでEXC_BAD_ACCESSエラーが発生し、フェッチ リクエスト テンプレートの処理にまでさかのぼって追跡しました。つまり、これはエラーであるか、間違ったことをしたに違いありません。

問題 2:この「基本的な」関係を適切に設定できているかどうかさえわかりません。

[コード]

// This code is meant to find an avatar with a certain name and then save the relationship
// between a character and said avatar.
// This is my app delegate file for the moment
// All the files are present, and I have deleted/recreated the app various times
-(void)characterMaker
{
    NSLog(@"Inside characterMaker...");
    NSError *error = nil;
    NSManagedObjectContext *context = [self managedObjectContext];
    NSManagedObjectModel *model = [self managedObjectModel];

    // Find an avatar with a specific name
    NSString *nameToFind = @"avt_player_1";


    // Use a Fetch request template
    NSDictionary *subs = [NSDictionary dictionaryWithObjectsAndKeys:nameToFind, @"AVATAR_NAME", nil];
    NSFetchRequest *fetchRequest = [model fetchRequestFromTemplateWithName:@"frqAvatarWithName" 
                                              substitutionVariables:subs];


    // Set the entity to use
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Avatar"
                                              inManagedObjectContext:context];


    [fetchRequest setEntity:entity];

    // Execute the query (it never even reaches this point)
    NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];

    if (fetchedObjects == nil) {
        // Handle the error
        NSLog(@"Error -- %@", [error localizedDescription]);
        abort();
    }

    NSLog(@"Found %@ records", [fetchedObjects count]);

// Print out avatar names
    for (Avatar *a in fetchedObjects)
    {
        NSLog(@"Name = %@", [a valueForKey:@"name"]);
    }

    // This is where I would use `a` and store it in a character entity, and thus create the relationship

[/コード]

4

1 に答える 1

0

私はこれをあきらめ、プロジェクト全体を FMDatabase プロジェクトと SQLite で行いました。この方法で問題を解決できました。

スレッドを閉じました。

于 2011-01-04T10:10:09.237 に答える