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字段是否具有正确的访问权限.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...