所以我在核心数据中的两个实体之间有两个关系,标题为“数字”和“信息”。我给用户他们的号码,当我这样做时,我希望他们回报给我他们的名字,以便我可以将它与他们的具体号码联系起来。我似乎无法正确地执行此操作。到目前为止,我认为最接近的是:
for (UserNumber *pinNumbers in [entryView pinNumberArray]) {
if ([numberString isEqualToString:pinNumbers.PIN]) {
UserInfo *info = pinNumbers.info;
[info setName:nameField.text];
}
}
其中我遍历他们输入的数字,如果我可以在核心数据填充的数组中找到它,我会希望他们为此分配他们的名字。有人能告诉我一个如何做到这一点的例子吗?
感谢。
答案 0 :(得分:1)
如果您的模型是这样的:
这样UserNumber和UserInfo之间存在一对一的双向关系,那么您似乎可能将'number'作为UserInfo的属性并简化您的模型。 (对于每个UserInfo,'number'是唯一的吗?)
但是,假设您使用当前模型,假设一对一的关系,这样的事情应该有效 - 前提是UserNumber具有'number'属性和称为'info'的一对一关系,指向UserInfo。< / p>
// Search for UserNumber that has NSString* pinCode as value for attribute PIN
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"UserNumber"
inManagedObjectContext:managedObjectContext]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"PIN contains[cd] %@", pinCode];
[fetchRequest setPredicate:predicate];
NSError *error = nil;
NSArray *items = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
[fetchRequest release];
// UserNumber with matching PIN was found, so set name of associated UserInfo.
if ( [items count] == 1 )
{
UserNumber *userNumber = [items lastObject];
UserInfo *userInfo = [userNumber info];
[userInfo setName:nameField.text];
}
请注意,项目应该包含零个或一个元素。如果是,则第一个元素是匹配的UserNumber。通过遍历UserNumber的“信息”关系,您将能够获得相应的UserInfo - 前提是您之前已正确创建了链接。
<强>更新强>
在编写此代码片段时,我意识到我实际上并不了解您要做的事情;-)。这是注册过程的一部分吗?如果是这样,那么您将需要处理对象之间的UserInfo对象和关系的创建。或者这是登录的一部分吗?或者编辑用户信息的一部分?无论如何,希望这会有所帮助。