【发布时间】:2015-12-14 19:26:31
【问题描述】:
我有 4 个包含 Parse query.findObjectsInBackgroundWithBlock 的函数。这些被调用来获取数据,然后填充表格视图。使用调度组。
这是我的解析查询的两个示例
func getEventImages() {
print("getEventImages enter")
dispatch_group_enter(self.group)
let query = PFQuery(className: "events")
query.orderByAscending("eventDate")
query.findObjectsInBackgroundWithBlock { (objects:[AnyObject]!, error: NSError!) -> Void in
// Initialize your array to contain all nil objects as
// placeholders for your images
if error == nil {
self.eventMainImageArray = [UIImage?](count: objects.count, repeatedValue: nil)
for i in 0...objects.count - 1 {
let object: AnyObject = objects[i]
let mainImage = object["mainImage"] as! PFFile
//dispatch_group_enter(self.group)
mainImage.getDataInBackgroundWithBlock({
(imageData: NSData!, error: NSError!) -> Void in
if (error == nil) {
let mainImage = UIImage(data:imageData)
self.eventMainImageArray[i] = mainImage
print("getEventImages appended")
}
else {
print("error!!")
}
})
}
}
print("getEventImages leave")
dispatch_group_leave(self.group)
}
}
func getEventInfo() {
print("eventInfo enter")
dispatch_group_enter(group)
let query = PFQuery(className: "events")
query.orderByAscending("eventDate")
query.findObjectsInBackgroundWithBlock { (objects:[AnyObject]!,error: NSError!) -> Void in
self.eventNameArray = [String?](count: objects.count, repeatedValue: nil)
self.eventInfoArray = [String?](count: objects.count, repeatedValue: nil)
self.eventDateArray = [NSDate?](count: objects.count, repeatedValue: nil)
self.eventTicketsArray = [String?](count: objects.count, repeatedValue: nil)
if error == nil {
for i in 0...objects.count - 1 {
let object: AnyObject = objects[i]
let eventName = object["eventName"] as! String
let eventInfo = object["eventInfo"] as! String
let eventDate = object["eventDate"] as! NSDate
let eventTicket = object["Tickets"] as! String
self.eventNameArray[i] = eventName
self.eventInfoArray[i] = eventInfo
self.eventDateArray[i] = eventDate
self.eventTicketsArray[i] = eventTicket
print("event info appended")
}
}
print("event info leave")
dispatch_group_leave(self.group)
}
}
还有我的 dispatch_group_nofity
dispatch_group_notify(group, dispatch_get_main_queue()) { () -> Void in
print("Finished reloadDataFromServer()")
self.tableView.reloadData()
self.refreshControl?.finishingLoading()
}
}
问题在于,如果在调用 dispatch_group_leave(self.group) 之前足够快地检索到数据,则会导致过早重新加载 tableview 数据。我需要得到这个,以便在追加完成时调用 dispatch_group_leave。
【问题讨论】:
-
为什么要解压 PFObject 并将属性存储在多个数组中?为什么不简单地将 PFObjects 本身存储在一个数组中,然后在创建表行时访问对象属性?存储事件数组还可以避免必须对事件发出两次相同的查询,然后您就不需要调度组。它还将使用更少的时间、数据和更少的 Parse 事务
-
查看示例时,大多数人都是这样做的。此外,我猜测将来当我需要更新和更改某些对象时,为单个对象执行此操作会更容易,而不必再次抓取和更新整个 pfobject。你怎么看?
-
你能给我举个例子来说明你的意思吗?我明白你在说什么,但我不太确定在创建行以及编辑和更新某些对象时如何使用它
-
不,只保留PFObject,然后如果要更新它,只需更新属性并在其上调用
save方法之一。无需再次获取它。
标签: ios swift parse-platform grand-central-dispatch dispatch