2012-10-19 92 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

所以我會確保您有公共訪問正確設置(在我的項目,這是設置查詢運行之前)的代碼,你正在使用的查詢,看起來不錯。

相關問題