我是core data的新手,目前正在从事的项目涉及使用核心数据进行本地数据存储。

以下是我的实体的结构。

我的应用程序功能如下。当用户首次启动该应用程序时,将显示一个登录屏幕。新用户可以注册。当用户尝试注册时,他们必须在注册之前输入已经提供给他们的唯一密钥。此唯一密钥已在Facility表中验证。如果密钥存在,则在数据库中,然后将用户数据输入数据库,并将在刚刚为其输入代码的AssessorFacility之间建立关系。

我的问题是,如何在新的Assessor和现有的Facility之间建立关系?

我在想,我应该从Facility提取所需的core data对象,然后使用[assessor setValue:facilityObject forKey:@"facility"]设置对象。

有人可以帮助我了解如何在将facilityObject分配给Facility之前从core dataAssessor表中获取Facility吗?

提前致谢。

编辑:
例如:

这是我的ojit_code表的外观。

代码名称

H6DJ |电脑运算

因此,如果用户(John Doe)输入H6DJ作为注册码,我将检查Facility表,以查看其是否存在。因此,在这种情况下,我想在新用户(John Doe)和计算机设施之间建立一种关系。

最佳答案

Core Data Programming Guide提供了许多示例代码。

您关于设置新评估者实体的facility属性的想法是正确的-您只需要首先获取设施-大概无论如何您都需要这样做以验证输入的设施代码。

NSManagedObject *newAssessor = [NSEntityDescription
insertNewObjectForEntityForName:@"Assessor"
inManagedObjectContext:context];

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity =
[NSEntityDescription entityForName:@"Facility"
        inManagedObjectContext:managedObjectContext];
[request setEntity:entity];

NSPredicate *predicate =
[NSPredicate predicateWithFormat:@"code == %@", targetCode];
[request setPredicate:predicate];

NSError *error;
NSArray *array = [managedObjectContext executeFetchRequest:request error:&error];
if (array != nil) {
    NSUInteger count = array.count;
    if (count == 1) {
        NSManagedObject *facility=array[0];
        if (facility["assessor"]==nil) {
            newAssessor["facility"]=facility;
            // Set up rest of assessor attributes before saving
        } else {
           //  Error - facility already assigned to assessor ?
        }
    } else if (count == 0) {
      //  Code not found/valid - do something
    } else {
       // More than 1 matching facility - data error
   }
}
else {
    // Deal with error.
}

10-08 02:48