Настройка основных отношений с Fetch Requests - PullRequest
0 голосов
/ 10 декабря 2010

Я хочу установить базовые отношения с двумя объектами в Базовых данных, но связь либо не сохраняется, либо не работает должным образом, и я не уверен, почему.

Это две сущности Character и Avatar, это отношение один-к-одному. Персонаж может иметь 1 аватар. Технически это должен быть «один аватар, которым могут владеть многие персонажи», но об этом я расскажу позже.

Я хочу добавить персонажей и назначить им аватар.

В Core Data уже есть 10 аватаров и 1 символ, оба из которых я проверял через Терминал и SQLite.

Проблема в том, что у меня возникают проблемы с "поиском аватара по имени и сохранением связи с персонажем".

Пока что

Я настроил запрос на выборку под названием: "frqAvatarWithName", где Предикат имеет следующую структуру:

[цитата]

name == $ 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

[/ код]

1 Ответ

0 голосов
/ 04 января 2011

Я отказался от этого и сделал весь проект с проектом FMDatabase и SQLite; Я смог решить проблему таким образом.

Тема закрыта.

...