Ios 解析:检索最后一个对象
我试图通过描述字段“createdAt”检索选择顺序的最后一个对象: 在SQL中,类似以下内容:Ios 解析:检索最后一个对象,ios,swift,parse-platform,Ios,Swift,Parse Platform,我试图通过描述字段“createdAt”检索选择顺序的最后一个对象: 在SQL中,类似以下内容: SELECT * FROM Message ORDER BY createdAt DESC LIMIT 1 我试过这个,但不起作用。结果是第一个对象: let query = PFQuery(className: "Message") query.orderByDescending("createdAt") query.limit = 1 var lastMessage = "..."
SELECT *
FROM Message
ORDER BY createdAt DESC
LIMIT 1
我试过这个,但不起作用。结果是第一个对象:
let query = PFQuery(className: "Message")
query.orderByDescending("createdAt")
query.limit = 1
var lastMessage = "..."
if let objects = query.findObjects() as [AnyObject]?
{
for object in objects
{
//Execute one time only and don't return the row that i want
lastMessage = object["Text"] as! String
}
}
通过这段惰性代码,我得到了我想要的,但我必须按所有对象循环:
let query = PFQuery(className: "Message")
var lastMessage = "..."
if let objects = query.findObjects() as [AnyObject]?
{
for object in objects
{
//Execute many times and return the row that i want int the last
lastMessage = object["Text"] as! Strin
}
}
不惜一切代价避免使用同步调用,如
findObjects()
。相反,请尝试使用findobjectsinbackgroundithblock
let query = PFQuery(className: "Message")
query.orderByDescending("createdAt")
query.limit = 1
query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]?, error: NSError?) -> Void in
if (error == nil) {
if let firstObject = objects?.first {
lastMessage = firstObject["Text"] as! String
}
} else {
// Log details of the failure
println("query error: \(error) \(error!.userInfo!)")
}
}
但是如果需要同步数据,则需要在后台执行所有查询,以便它们不会出现在主线程上。除此之外,主线程控制应用程序的UI,如果您通过执行长时间运行的同步操作(如查询)来阻止主线程,则在查询完成之前,UI将无响应。如果需要使用Parse中的数据更新UI,您可以在completion块中处理所有这些。如果您有其他需要同步操作的逻辑,请使用
NSNotifications
来构造流
let query = PFQuery(className: "Message")
query.orderByDescending("createdAt")
query.limit = 1
query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]?, error: NSError?) -> Void in
if (error == nil) {
if let firstObject = objects?.first {
lastMessage = firstObject["Text"] as! String
}
} else {
// Log details of the failure
println("query error: \(error) \(error!.userInfo!)")
}
}