Parse.com查询不执行for-in语句(iOS obj C)

时间:2016-01-25 15:39:14

标签: ios objective-c parse-platform

刚开始使用Parse构建iOS应用程序。我一丝不苟地按照入门指南进行操作,正如预期的那样,可以创建和保存Parse对象以及登录用户。不幸的是,当我创建一个PFQuery对象并尝试从parse中检索数据时,查询方法本身执行时没有错误,但是没有返回数据,在我的情况下忽略了代码块中的for-in语句。我觉得这个特别奇怪,因为我从Parse文档中复制粘贴了这段代码。

有人可以向我解释为什么这不起作用/为我提供更好的解决方案吗?会永远感激!!

这是我的代码:

(void)viewDidLoad {
    [super viewDidLoad];

    PFQuery *query = [PFQuery queryWithClassName:@"User"];

    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        if (!error) {

            NSLog(@"Test 1 retrieved %d Users.", objects.count);

            for (PFObject *object in objects) {

                NSLog(@"Test 2 Retrived %d Users.", objects.count);
                [self.array addObject: object];
            }
        } else {

            NSLog(@"Error: %@ %@", error, [error userInfo]);
        }
    }];

    NSLog(@"%@", self.array);

}

这是NSLog的结果:

2016-01-25 10:11:56.708 FSJ[4507:405721] (null)
2016-01-25 10:11:56.790 FSJ[4507:405721] Test 1 retrieved 0 Users.

注意:1)根据我的阅读,人们似乎认为这可能与线程有关,但我也尝试使用findObject方法,虽然不建议使用主线程,但收到相同的结果。 2)另外,认为它可能与访问权限有关,但我确保在我的数据浏览器中所有的读取,写入和添加权限都被检查并公开。

3 个答案:

答案 0 :(得分:1)

您需要使用[PFQuery queryWithClassName:@"_User"];代替[PFQuery queryWithClassName:@"User"];

更好的是,在查询PFUser类时应该使用以下内容

PFQuery *query = [PFUser query];

答案 1 :(得分:0)

[super viewDidLoad];

PFQuery *query = [PFQuery queryWithClassName:@"User"];

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (!error) {

        NSLog(@"Test 1 retrieved %d Users.", objects.count);

        for (PFObject *object in objects) {

            NSLog(@"Test 2 Retrived %d Users.", objects.count);
            [self.array addObject: object];

        }

        //After the objects have been added to the array,
        //Now log the array
        NSLog(@"%@", self.array);

    } else {

        NSLog(@"Error: %@ %@", error, [error userInfo]);
    }
}];

//This line will be executed before [query findObjectsInBackgroundWithBlock]
//Because it's run async. The array would not be populated yet at this point
//NSLog(@"%@", self.array);

答案 2 :(得分:0)

您实际上需要使用特定类型的查询,即用户查询PFUser.query()

这是swift

中的一个例子
func fetchUsers() {
    let userQuery: PFQuery = PFUser.query()!

    userQuery.orderByAscending("username")
    userQuery.whereKey("username", notEqualTo: (currentUser?.username)!)
    userQuery.findObjectsInBackgroundWithBlock({
        (users, error) -> Void in

        var URLs = users!

        if error == nil {
            if URLs.count >= 1 {
                for i in 0...users!.count-1 {
         self.urlsArray.append(URLs[i].valueForKey("indexPathRow") as! Int)
                }
            }

            self.usersArray = users as! [PFUser]
        } else {
            print(error)
        }
    })
}