gpt4 book ai didi

ios - 带有解析查询的 Swift 调度组

转载 作者:行者123 更新时间:2023-11-29 01:23:45 25 4
gpt4 key购买 nike

我有 4 个包含 Parse query.findObjectsInBackgroundWithBlock 的函数。这些被调用以获取数据然后填充 TableView 。使用调度组。

这是我的解析查询的两个例子

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。

最佳答案

不需要两种方法来检索数据,不需要将数据解包到多个数组中,也不需要使用调度组。

您只需要一个简单的方法来检索您的事件数据

var events:[PFObject]=[PFObject]()

func getEventInfo() {
let query = PFQuery(className: "events")
query.orderByAscending("eventDate")
query.findObjectsInBackgroundWithBlock { (objects:[AnyObject]!,error: NSError!) -> Void in
if error==nil {
self.events=objects as! [PFObject]
self.tableView.reloadData()
} else {
print("Something went wrong! - \(error)"
}
self.refreshControl?.finishingLoading()
}
}

然后,您还没有显示您的cellForRowAtIndexPath,但您会看到类似的内容

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = self.tableView.dequeueReusableCellWithIdentifier("cell") as! MyTableViewCell
let event=self.events[indexPath.row]

cell.eventName.text=event["eventName"] as? String
cell.eventInfo.text=event["eventInfo"] as? String
if let mainImageFile=event["mainImage"] as? PFFile {
mainImageFile.getDataInBackgroundWithBlock({
(imageData: NSData!, error: NSError!) -> Void in
if (error == nil) {
let mainImage = UIImage(data:imageData)
cell.mainImage= mainImage
}
else {
print("error!!")
}
}
return cell;
}

您可以使用 PFImageView 或类似 SDWebImage 的框架来处理图像缓存并在加载图像时将占位符图像放置到位。

如果你想更新一个事件很简单

 var event=self.events[someindex];
event["eventName"]=newValue
event.saveInBackground()

关于ios - 带有解析查询的 Swift 调度组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34275028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com