ios – PFQuery FindObjectsInBackground返回0

前端之家收集整理的这篇文章主要介绍了ios – PFQuery FindObjectsInBackground返回0前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的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字段是否具有正确的访问权限.

原文链接:https://www.f2er.com/iOS/333692.html

猜你在找的iOS相关文章