我正在使用Parse,我正在从名为“usernames”的数据浏览器中检索一个类。 我得到了类中的所有对象,并将它们存储在一个数组中。然后我想在数组中搜索用户名,以便用户可以登录。我会为密码做同样的事情。这是我的代码:
- (IBAction)login:(id)sender
{
if ([usernameLogin.stringValue isEqualTo:@""] || [passwordLogin.stringValue isEqualTo:@""]) {
NSBeginAlertSheet(@"Error", @"OK", nil, nil, self.window, self, @selector(sheetDidEnd:resultCode:contextInfo:), NULL, NULL, @"Please fill in all fields.");
}
/* retrieve user from parse db */
PFQuery *usernameQuery = [PFQuery queryWithClassName:@"usernames"];
[usernameQuery findObjectsInBackgroundWithBlock:^(NSArray *usernames, NSError *error) {
NSString *userString = [NSString stringWithFormat:@"%@", usernameLogin.stringValue];
NSLog(@"USERS:\n %@", usernames);
int i;
for (i = 0; i < [usernames count]; i++) {
NSString *userFind = [usernames objectAtIndex:i];
if ([userString isEqualToString:userFind]) {
NSLog(@"FOUND!!!");
}
}
/*
if ([usernames indexOfObject:usernameLogin.stringValue]) {
NSLog(@"User: '%@' was found successfully!", usernameLogin.stringValue);
} else {
NSLog(@"User: '%@' doesn't exist in database, or password was incorrect!", usernameLogin.stringValue);
}
*/
}];
gameCont = [[CSGameController alloc] initWithWindowNibName:@"CSGameController"];
[gameCont showWindow:self];
[gameCont.window makeKeyAndOrderFront:nil];
_window.isVisible = false;
}
有谁能解释我做错了什么?我正在搜索数据库以查看输入的用户是否存在。我设置了一个测试用户,它仍然说它不存在。非常感谢! 添加了:
int i;
for (i = 0; i < [usernames count]; i++) {
NSString *userFind = [usernames objectAtIndex:i];
NSLog(@"UserFind class = %@, value = %@", [userFind class], userFind);
}
输出:
[2438:303] UserFind class = PFObject, value = <usernames:kx7aG2xfkX:(null)> {
username = ryan;
}
答案 0 :(得分:3)
似乎你在这里尝试做很多事情,只是没有意义。请考虑阅读Parse iOS Guide。所有PFQueries都返回PFObjects。 PFObjects在很多方面都像NSDictionaries;它们是数据库中的单个记录,可以获取或存储。 PFQuery总是返回一个或多个PFObject。 PFQuery的结果应该几乎总是可以立即使用。在这个例子中,equals条件可以用 - [PFQuery whereKey:equalTo:]表达。让Parse为您搜索更快更多。这也允许您通过PFQueryTableViewController创建由查询结果提供支持的UI。 最后,请不要自己制作登录代码。您当前的代码很容易被黑客入侵,不仅允许任何人以任何人身份登录,还可以学习任何人的密码。将内置PFUser类用于用户帐户。它处理安全登录,凭证离线缓存,密码重置,电子邮件验证,您可以让用户使用他们的Facebook或Twitter帐户登录除用户名/密码,Parse还有内置的视图控制器,用于登录和创建帐户PFUsers。 PFUsers也是保护数据的方法; PFACL是一个访问控制列表,可让您确定哪些PFU可以读取或写入数据。
答案 1 :(得分:1)
这是错误的,你试图使用isEqualToString
:userFind,PFObject
。
尝试与其username
属性进行比较:
...
for (PFObject *aUsername in usernames)
{
NSString *userFind = [aUsername objectForKey:@"username"];
if ([userString isEqualToString:userFind]) {
NSLog(@"FOUND!!!");
}
}
答案 2 :(得分:0)
问题解决了:我使用了Parse的User类。他们有预先存在的注册用户的方法,就像我在我自己的课程中尝试做的那样。他们的注册方法是:
PFUser *user = [PFUser user];
user.email = emailField.stringValue;
user.username = usernameField.stringValue;
user.password = passwordField.stringValue;
[user signUpInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {