0

我正在使用Parse,我正在从数据浏览器中检索一个名为“用户名”的类。我得到了类中的所有对象,并将它们存储在一个数组中。然后我想在数组中搜索用户名,以便用户可以登录。我会为密码做同样的事情。这是我的代码:

- (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;

}

4

3 回答 3

3

看来您在这里尝试做很多没有意义的事情。请考虑阅读Parse iOS 指南。所有 PFQueries 都返回 PFObjects。PFObjects 在很多方面都像 NSDictionaries;它们是数据库中的一条记录,可以获取或存储。PFQuery 总是返回一个或多个 PFObject。一个 PFQuery 的结果应该几乎总是可以被确定为立即有用的。在这个例子中,equals 条件可以用 -[PFQuery whereKey:equalTo:] 来表达。很多_让 Parse 更快地为您进行搜索。这还允许您通过 PFQueryTableViewController 创建由查询结果提供支持的 UI。最后,请不要制作自己的登录代码。您当前的代码很容易被黑客入侵,不仅允许任何人以任何人的身份登录,而且还可以学习任何人的密码。为用户帐户使用内置的 PFUser 类。它处理安全登录、凭据的离线缓存、密码重置、电子邮件验证,除了用户名/密码之外,您还可以让用户使用他们的 Facebook 或 Twitter 帐户登录,Parse 具有用于登录和创建帐户的内置视图控制器PF 用户。PFUsers 也是保护您数据的方式;PFACL 是一个访问控制列表,可让您决定哪些 PFUser 可以读取或写入数据。

于 2013-03-08T17:38:11.540 回答
1

您尝试使用的错误是isEqualToString:使用 userFind,即PFObject.

尝试与它的username属性进行比较:

    ...
    for (PFObject *aUsername in usernames) 
    {           
        NSString *userFind = [aUsername objectForKey:@"username"];

        if ([userString isEqualToString:userFind]) {
        NSLog(@"FOUND!!!");
        }
    }
于 2013-03-08T00:43:13.837 回答
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) {
于 2013-03-10T03:12:20.553 回答