如何在后台获取tableview的数据?
How to get a tableview's data in the background?
我有一个后台任务 (usingParse.com API) 可以获取和计算表视图的数据:
var usedMessages = [String]()
var currentMessages = [Message]()
func getCurrentMessages() {
if currentUser != nil {
var entryQuery = Entry.query()
entryQuery.whereKey("user", equalTo: currentUser)
entryQuery.whereKey("originatedFromType", equalTo: "message")
entryQuery.findObjectsInBackgroundWithBlock { (entryObjects: [AnyObject]!, getEntriesError: NSError!) -> Void in
for object in entryObjects {
var entry = object as Entry
usedMessages.append(entry.originatedFromId)
}
var messageQuery = Message.query()
messageQuery.whereKey("endDate", greaterThan:NSDate())
messageQuery.findObjectsInBackgroundWithBlock { (objects: [AnyObject]!, error: NSError!) -> Void in
for object in objects {
var message = object as Message
if !contains(usedMessages, message.objectId) {
currentMessages.append(message)
}
}
self.tableview.reloadData()
}
}
}
}
这是处理获取表视图数据然后重新加载表视图数据的正确方法吗?或者我应该使用一个委托来通知表视图数据已更改?或者甚至 query.findObjectInBackgroundWithTarget 并发送结果?
你的处理方式没有问题。但你必须确保那是你想要的行为。您基本上首先从 Entry 获取数据,然后在第一次调用完成时从 Message 获取结果。然后,您将在第二次调用完成时重新加载 table 视图。没有问题。
但是,您必须检查是否有返回的错误,如果您想要处理某些特定的错误,您可能想要处理它。
您应该始终确保 reloadData 和任何 UI 更新发生在主线程 中。还要检查该方法是否 return 出错。
messageQuery.findObjectsInBackgroundWithBlock { (objects: [AnyObject]!, error: NSError!) -> Void in
if (error == nil)
{
//Your code.
dispatch_async(dispatch_get_main_queue(),{ () -> Void in
self.tableView.reloadData()
})
}
else
{
// Log the error
}
}
我有一个后台任务 (usingParse.com API) 可以获取和计算表视图的数据:
var usedMessages = [String]()
var currentMessages = [Message]()
func getCurrentMessages() {
if currentUser != nil {
var entryQuery = Entry.query()
entryQuery.whereKey("user", equalTo: currentUser)
entryQuery.whereKey("originatedFromType", equalTo: "message")
entryQuery.findObjectsInBackgroundWithBlock { (entryObjects: [AnyObject]!, getEntriesError: NSError!) -> Void in
for object in entryObjects {
var entry = object as Entry
usedMessages.append(entry.originatedFromId)
}
var messageQuery = Message.query()
messageQuery.whereKey("endDate", greaterThan:NSDate())
messageQuery.findObjectsInBackgroundWithBlock { (objects: [AnyObject]!, error: NSError!) -> Void in
for object in objects {
var message = object as Message
if !contains(usedMessages, message.objectId) {
currentMessages.append(message)
}
}
self.tableview.reloadData()
}
}
}
}
这是处理获取表视图数据然后重新加载表视图数据的正确方法吗?或者我应该使用一个委托来通知表视图数据已更改?或者甚至 query.findObjectInBackgroundWithTarget 并发送结果?
你的处理方式没有问题。但你必须确保那是你想要的行为。您基本上首先从 Entry 获取数据,然后在第一次调用完成时从 Message 获取结果。然后,您将在第二次调用完成时重新加载 table 视图。没有问题。
但是,您必须检查是否有返回的错误,如果您想要处理某些特定的错误,您可能想要处理它。
您应该始终确保 reloadData 和任何 UI 更新发生在主线程 中。还要检查该方法是否 return 出错。
messageQuery.findObjectsInBackgroundWithBlock { (objects: [AnyObject]!, error: NSError!) -> Void in
if (error == nil)
{
//Your code.
dispatch_async(dispatch_get_main_queue(),{ () -> Void in
self.tableView.reloadData()
})
}
else
{
// Log the error
}
}