objective c - 设置关系(核心数据)
objective c - set relationship (core data)
我是 core data
的新手,我目前正在进行的项目涉及使用核心数据进行本地数据存储。
下面是我的实体的结构。
我的应用程序功能如下。当用户首次启动该应用程序时,会出现一个登录屏幕。新用户可以注册。当用户尝试注册时,他们必须输入在注册之前已经提供给他们的唯一密钥。此唯一密钥在 Facility
table 中验证。如果密钥存在于数据库中,那么我会将用户数据输入数据库,并在他们刚刚输入代码的 Assessor
和 Facility
之间创建关系。
我的问题是,如何在新 Assessor
和现有 Facility
之间建立关系?
我在想,我应该从core data
中获取所需的Facility
对象,然后使用[assessor
setValue:facilityObjectforKey:@"facility"]
来设置该对象。
任何人都可以帮助我了解如何在将 Facility
table 分配给 Assessor
之前从 core data
中获取 facilityObject
吗?
提前致谢。
编辑:
例如:
这就是我的 Facility
table 的样子。
代码 |名字
H6DJ |计算
因此,如果用户 (John Doe) 输入 H6DJ 作为注册码,我会检查设施 table 以查看它是否存在。所以在这种情况下,我想在新用户 (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.
}
我是 core data
的新手,我目前正在进行的项目涉及使用核心数据进行本地数据存储。
下面是我的实体的结构。
我的应用程序功能如下。当用户首次启动该应用程序时,会出现一个登录屏幕。新用户可以注册。当用户尝试注册时,他们必须输入在注册之前已经提供给他们的唯一密钥。此唯一密钥在 Facility
table 中验证。如果密钥存在于数据库中,那么我会将用户数据输入数据库,并在他们刚刚输入代码的 Assessor
和 Facility
之间创建关系。
我的问题是,如何在新 Assessor
和现有 Facility
之间建立关系?
我在想,我应该从core data
中获取所需的Facility
对象,然后使用[assessor
setValue:facilityObjectforKey:@"facility"]
来设置该对象。
任何人都可以帮助我了解如何在将 Facility
table 分配给 Assessor
之前从 core data
中获取 facilityObject
吗?
提前致谢。
编辑: 例如:
这就是我的 Facility
table 的样子。
代码 |名字
H6DJ |计算
因此,如果用户 (John Doe) 输入 H6DJ 作为注册码,我会检查设施 table 以查看它是否存在。所以在这种情况下,我想在新用户 (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.
}