在我的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个对象。
发布于 2017-09-21 14:34:01
正如其他人已经建议的那样,我将首先执行最简单的查询:
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, [error userInfo]);
}
}]; 如果没有错误地执行,返回0个对象,并且仪表板显示有应该返回的对象,则类名称一定是错误的。所以请仔细检查类名,例如拼写。
如果返回对象,那么您的过滤器一定是错误的。你的for是错误的,有两个原因:
1) for循环执行多次,但由于没有使用index,所以它总是执行相同的指令。我猜你想写(,但这也是错误的)
for (i = 0; i < [follows count]; i++) {
[query whereKey:@"Session" containedIn:follows[i]];
} 2)这是错误的,因为您只能有一个过滤器whereKey:containedIn:。正如DevKyle已经提到的,这个单一的过滤器被follows.count-1 -次覆盖,并且只使用最后一个过滤器。
我猜你想要一个单独的过滤器的逻辑或。如果是这样的话,你必须扁平化你的数组,也就是在follows[i]中创建一个包含所有元素的数组过滤器,参见here,然后设置一个NSArray *flattenedFollows
[query whereKey:@"Session" containedIn: flattenedFollows]; 编辑:
最后一个想法:如果您的查询是正确的(除了for循环之外),并且无论如何都没有返回任何对象,则可能是您没有访问它们的权限。因此,请检查这些记录的ACL字段是否具有正确的访问权限。
https://stackoverflow.com/questions/46167647
复制相似问题