我在获取具有特定条件的行时遇到问题。
我有一个名为UserAccounts
的实体,它包含四个属性:userName
,passWord
,userFullName
,userLevel
。
要登录,我必须获得与passWord
匹配的userName
。为此,我有两个文本字段userNameTF
和passWordTF
。
我必须使用与userNameTF.stringValue
匹配的实体(我使用SQL来比较我的请求)获取一行,然后检查passWord
属性是否等于passWordTF.stringValue
。
现在,我可以使用以下命令从我的核心数据存储中分别获取userName
和passWord
的数组:
NSArray *userName = [[userAccountsArray arrangedObjects] valueForKey:@"userName"];
NSArray *passWord = [[userAccountsArray arrangedObjects] valueForKey:@"passWord"];
但是这两个数组彼此没有关系,我无法将密码与输入的用户名进行比较。
我之前在VisualStudio中使用SQL select "password" from userAccounts where userName = @"username"
完成了这个,然后将结果与输入的密码进行比较,但我找不到用实体获取行的方法,用它的属性做某事
答案 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 !
无论如何,这是我解决问题的方法,我认为还有更多解决方案。
谢谢大家。