使用Fetch Requests设置基本关系

时间:2010-12-10 14:35:30

标签: core-data entity-relationship nsfetchrequest

我想与Core Data中的两个实体建立基本关系,但这种关系要么没有保存,要么工作不正常,我不确定原因。

这两个实体是CharacterAvatar,它是一对一的关系。角色可以有1个头像。从技术上讲,它应该是“一个化身可以由许多角色拥有”,但我稍后会处理它。

我想添加字符并为其指定一个头像。

核心数据中已有10个头像和1个角色,我通过终端和SQLite验证了这两个角色。

问题是,我遇到了“通过名字找到头像然后将关系保存到角色”的麻烦。

到目前为止,

我设置了一个名为“frqAvatarWithName”的获取请求,其中Predicate具有以下结构:

【引用】

  

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 :(得分:0)

我放弃了这个并用FMDatabase项目和SQLite完成了整个项目;我已经能够以这种方式解决问题。

线程关闭。