2012-10-19 91 views
2

我有几个类之一,其中一个是用户,另一个是TestObject。如果我查询用户(我通过试验&错误发现它应该作为_User查询),我得到正确的记录计数,但是如果我查询TestObject,我得到0.这发生在一些类,但不是所有。这是为什么?Parse.com iOS queryWithClassName适用于某些人而不是其他人,为什么?

PFQuery *query = [PFQuery queryWithClassName:@"_User"]; 
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
      if (error) { 
       NSLog(@"Error: %@ %@", error, [error userInfo]); 
      } else { 
       NSLog(@"Successfully retrieved %d scores.",objects.count); 
      } 
}]; 

这将返回:

2012年10月19日13:55:03.239 TableViewParseDotCom [5497:10103] 成功检索24个分数。

但是,如果我改变线,以便:

PFQuery *查询= [PFQuery queryWithClassName:@ “的TestObject”];

我得到0计数,但我知道我有45条记录。为什么?

+0

您是否使用基于Web的仪表板检查了Parse中的记录?这可能有帮助。 – CuriousRabbit

+0

是的,有数据,事情看起来很好。 – sAguinaga

+0

不知道你为什么遇到TestObject的问题,但是查询用户,你应该使用'[PFUser query]'(https://www.parse.com/docs/ios/api/Classes/PFUser.html# // api/name/query) – user94154

回答

1

最常见的原因是您查询了您无权访问的对象。仔细检查一下,如果这些对象具有ACL,则您将以同一用户身份登录。

+0

作为项目的所有者,我不需要以用户身份登录,对吧?如果我想统计我的数据集,我应该能够查询这些数据。所以,我应该能够看到我的所有记录是什么。然后,如果我想查看给定用户的更多具体细节,那么其中键匹配某个值的查询也应该正常工作。我会再看看ACL建议@Thomas – sAguinaga

+0

iOS无法知道您是应用程序的所有者。数据浏览器绕过所有安全性并显示所有对象。如果您使用的是REST API,则可以使用-X-Parse-Master-Key标题而不是-X-Parse-REST-API-Key标题(显然,将密钥更改为主键)以绕过您想要生成的任何分析的访问限制。 –

+0

角色(https://parse.com/docs/ios_guide#roles)是一种解决此问题的方法,同时仍尊重安全性。创建一个“管理员”角色并设置默认ACL以允许对管理员角色进行读取访问。然后,您可以向需要此全局访问权限的角色添加(并稍后删除)任何用户。 –

1

除了检查要查询的对象的ACL之外,还应该查看“分析”仪表板中的“设置”。如果您不想强制用户登录,请确保“允许匿名用户”设置为开启。

此外,在TestObject对象的数据浏览器中,单击“更多”按钮,然后从下拉列表中选择“权限”。确保您的设置对于“查找”和“获取”是正确的 - 设置为公开且没有角色/用户开始以帮助您进行调试。这应该确保你可以查询你的TestObject对象。

0

不要忘记设置读取权限。这些都可以编程设置如下:

PFACL * defaultACL = [PFACL ACL]; 
[defaultACL setPublicReadAccess:YES]; 
[PFACL setDefaultACL:defaultACL withAccessForCurrentUser:YES]; 

我只是跑两个查询,一个在我的用户,一个在另一个类(的imageCLASS),他们都退回罚款。

用户查询:

// Remember for users we can run a user query instead of needing to specify the class 
PFQuery * userQuery = [PFUser query]; 
[userQuery whereKey:@"username" equalTo:currentUser.username]; 

[userQuery findObjectsInBackgroundWithBlock:^(NSArray * objects, NSError *error) { 

}]; 

其他类查询:

PFQuery * imageQuery = [PFQuery queryWithClassName:@"bImageClass"]; 

[imageQuery findObjectsInBackgroundWithBlock:^(NSArray * objects, NSError *error) { 

}]; 

这是我在解析类的图片。

parsemenu

所以我会确保您有公共访问正确设置(在我的项目,这是设置查询运行之前)的代码,你正在使用的查询,看起来不错。

相关问题