条件提取

时间:2011-05-24 17:40:35

标签: objective-c core-data fetch

我在获取具有特定条件的行时遇到问题。

我有一个名为UserAccounts的实体,它包含四个属性:userNamepassWorduserFullNameuserLevel

要登录,我必须获得与passWord匹配的userName。为此,我有两个文本字段userNameTFpassWordTF。 我必须使用与userNameTF.stringValue匹配的实体(我使用SQL来比较我的请求)获取一行,然后检查passWord属性是否等于passWordTF.stringValue

现在,我可以使用以下命令从我的核心数据存储中分别获取userNamepassWord的数组:

NSArray *userName = [[userAccountsArray arrangedObjects] valueForKey:@"userName"];   
NSArray *passWord = [[userAccountsArray arrangedObjects] valueForKey:@"passWord"];

但是这两个数组彼此没有关系,我无法将密码与输入的用户名进行比较。

我之前在VisualStudio中使用SQL select "password" from userAccounts where userName = @"username"完成了这个,然后将结果与输入的密码进行比较,但我找不到用实体获取行的方法,用它的属性做某事

2 个答案:

答案 0 :(得分:0)

请记住,Core Data是一个对象图持久性库; SQL被抽象出来,用SQL术语思考通常只会导致混淆。

要解决此问题,您需要使用指定用户名的谓词创建提取请求。如果用户存在,它将返回一个包含一个用户对象的数组(假设此处名称是唯一的)。然后,您只需将密码字符串与用户管理对象上的密码属性进行比较,以检查它们是否相同。

答案 1 :(得分:0)

好吧,最后我找到了一种方法来解决我的问题!

使用此代码,我可以检索有关某个特定属性值的实体记录的完整属性。

NSArray *userAccounts=[userAccountsArray arrangedObjects]; 
NSArray *matchingAccounts=[userAccounts  filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"%K == %@",@"userName",userNameTF.stringValue]];
NSString *matchedPassWords=[[matchingAccounts valueForKey:@"passWord"]objectAtIndex:0];

所以我可以找到用户在userNameTF文本字段中输入的与 userName 相关的 passWord

无论如何,这是我解决问题的方法,我认为还有更多解决方案。

谢谢大家。