核心数据关系帮助......我希望应该是基本的

时间:2011-02-18 00:54:23

标签: iphone objective-c xcode core-data

所以我在核心数据中的两个实体之间有两个关系,标题为“数字”和“信息”。我给用户他们的号码,当我这样做时,我希望他们回报给我他们的名字,以便我可以将它与他们的具体号码联系起来。我似乎无法正确地执行此操作。到目前为止,我认为最接近的是:

        for (UserNumber *pinNumbers in [entryView pinNumberArray]) {
            if ([numberString isEqualToString:pinNumbers.PIN]) {
                UserInfo *info = pinNumbers.info;   
                [info setName:nameField.text];  
            }
        }

其中我遍历他们输入的数字,如果我可以在核心数据填充的数组中找到它,我会希望他们为此分配他们的名字。有人能告诉我一个如何做到这一点的例子吗?

感谢。

1 个答案:

答案 0 :(得分:1)

如果您的模型是这样的:

enter image description here

这样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对象关系的创建。或者这是登录的一部分吗?或者编辑用户信息的一部分?无论如何,希望这会有所帮助。