在我的UIViewController中,我试图查询我的解析服务器,但我一直得到0的返回值,虽然我知道100%这个类确实有对象.有什么想法吗?
PFQuery *query = [PFQuery queryWithClassName:@"General"]; int i; for (i = 0; i < [follows count]; i++) { [query whereKey:@"Session" containedIn:follows]; } query.cachePolicy = kPFCachePolicyCacheThenNetwork; [query orderByDescending:@"createdAt"]; [query findObjectsInBackgroundWithBlock:^(NSArray *objects,NSError *error) { // it never gets here... NSLog(@"OBJECTS%@",objects); if (!error) { NSLog(@"Successfully retrieved %lu objects.",(unsigned long)objects.count); for (PFObject *object in objects) { NSLog(@"%@",object.objectId); } // [self gotoMain]; } else { NSLog(@"Error: %@ %@",error,[error userInfo]); } }];
它告诉我在控制台中成功检索0个对象没有错误.
解决方法
正如其他已经建议的那样,我会先做最简单的查询:
PFQuery *query = [PFQuery queryWithClassName:@"General"]; [query findObjectsInBackgroundWithBlock:^(NSArray *objects,NSError *error) { if (!error) { NSLog(@"Successfully retrieved %lu objects.",(unsigned long)objects.count); } else { NSLog(@"Error: %@ %@",[error userInfo]); } }];
如果它没有错误地执行,则返回0个对象,并且仪表板显示有应该返回的对象,类名必须是错误的.所以请仔细检查班级名称,例如拼写.
如果返回了对象,则过滤器必定是错误的.你的错误有两个原因:
1)for循环执行follow.count – times,但它始终执行相同的指令,因为不使用索引.我想你想写(但这也错了)
for (i = 0; i < [follows count]; i++) { [query whereKey:@"Session" containedIn:follows[i]]; }
2)这是错误的,因为你只能有一个过滤器whereKey:containedIn:.正如DevKyle所提到的,这个单个过滤器会被覆盖follow.count-1次,并且只使用最后一个过滤器.
我想你想要有类似于各个过滤器的逻辑OR.如果是这样,你必须展平你的数组,即制作单个数组NSArray * flattenedFollows中的所有元素如下[i],见here然后设置一个过滤器
[query whereKey:@"Session" containedIn: flattenedFollows];
编辑:最后一个想法:如果你的查询是正确的(除了for循环)并且没有返回任何对象,可能是你没有权限访问它们.因此,请检查这些记录的ACL字段是否具有正确的访问权限.