2015-09-17 26 views
0

我试着通过递减场“createdAt”检索选择顺序的最后一个对象: 在SQL是这样的:解析:检索的最后一个对象

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 
    } 
} 

回答

0
var lastMessage = "..."   

let query = PFQuery(className: "Message", predicate: predicate) 

query.orderByDescending("createdAt") 

if let object = query.getFirstObject() as PFObject? 
{ 
    lastMessage = object["Text"] as! String 
} 
0

避免使用同步调用,如findObjects()不惜一切代价。相反,尝试使用findObjectsInBackgroundWithBlock

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!)") 
    } 
} 
+0

但如果您需要同步数据? –

+0

您需要在后台执行所有查询,以使它们不会出现在* main *线程中。除此之外,主线程控制应用程序的UI,并且如果通过执行长时间运行的同步操作(如查询)阻止主线程,则UI将无响应,直到查询完成。如果需要使用Parse中的数据更新UI,则可以处理完成块中的所有内容。如果您有其他需要同步操作的逻辑,请使用'NSNotifications'来构造流程 – Russell

相关问题