Core Data の 2 つのエンティティとの基本的な関係を設定したいと考えていますが、関係が保存されていないか、適切に機能していません。その理由がわかりません。
2 つのエンティティはCharacter
とAvatar
であり、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
[/コード]