Par*_*ari 3 ios parse-platform swift
我的iOS应用程序有一个解析后端.我有一个名为"测验"的解析类.如何读取Parse类中的行数,我必须在我的iOS应用程序中使用它?
我使用以下代码但xcode没有进入代码块.
var cnt = 1
var query = PFQuery(className:"quiz")
query.findObjectsInBackgroundWithBlock {
(objects: [PFObject]?, error: NSError?) -> Void in
if error == nil
{
// The find succeeded.
print("Successfully retrieved \(objects!.count) scores.")
cnt = objects!.count
}
else
{
// Log details of the failure
print("Error: \(error!) \(error!.userInfo)")
}
}
return cnt
Run Code Online (Sandbox Code Playgroud)
谢谢!
findObjectsInBackgroundWithBlock受查询限制约束,默认情况下最多返回100个对象.此限制可以增加,但最多只能增加1000.因此,您不能依赖findObjects并计算结果.
Parse在文档中包含了一种计算类或特定查询的对象总数的简单方法.
var query = PFQuery(className:"GameScore")
query.whereKey("playerName", equalTo:"Sean Plott")
query.countObjectsInBackgroundWithBlock {
(count: Int32, error: NSError?) -> Void in
if error == nil {
print("Sean has played \(count) games")
}
}
Run Code Online (Sandbox Code Playgroud)
斯威夫特3
let query = PFQuery(className:"GameScore")
query.whereKey("playerName", equalTo:"Sean Plott")
query.countObjectsInBackground { (count, error) in
if error == nil {
print("Sean has played \(count) games")
}
}
Run Code Online (Sandbox Code Playgroud)
还应该注意的是,由于计数操作的成本很高,Parse对它们进行了限制
计数查询的速率限制为每分钟最多160个请求.它们还可以为具有1,000个以上对象的类返回不准确的结果.因此,最好构建应用程序以避免这种计数操作(例如,通过使用计数器).
此不准确性不是由于1000请求对象限制.count查询将尝试获取无论大小的记录总数,但由于操作可能需要很长时间才能完成,因此在该窗口期间数据库可能已更改,并且返回的计数值可能不会更长时间有效.
处理计数的推荐方法是使用云代码中的保存触发器之前/之后基本维护您自己的索引.但是,这也是一种非理想的解决方案,因为保存挂钩可以在任何时候任意失败,并且(更糟糕的)postSave挂钩没有错误传播.另外,这是Parse Developers Google Group的 Hector Ramos的另一个引用.
一旦你抛出一些约束,计数查询总是很昂贵.如果你只关心集合的总大小,你可以运行一个没有任何约束的计数查询,并且一个应该非常快,因为得到记录的总数是一个不同的问题,而不是计算其中有多少匹配任意约束列表.这只是使用数据库系统的现实.
最后,引用Parse Engineering博客文章:在Parse上构建可扩展的应用程序.
假设您正在构建产品目录.您可能希望在顶级导航屏幕上显示每个类别中的产品数量.如果为每个UI元素运行计数查询,它们将无法在大型数据集上高效运行,因为MongoDB不使用计数B树.相反,我们建议您使用单独的Parse对象来跟踪每个类别的计数.无论何时添加或删除产品,您都可以在afterSave或afterDelete Cloud Code处理程序中递增或递减计数.
| 归档时间: |
|
| 查看次数: |
1586 次 |
| 最近记录: |