gpt4 book ai didi

ios - GCD 实现不适用于 PARSE 查询 (Swift)

转载 作者:搜寻专家 更新时间:2023-11-01 05:40:45 24 4
gpt4 key购买 nike



我查看了 Stack Overflow 和其他网络资源,了解如何处理异步 PARSE 查询并将此数据存储到数组中。然后我使用这个数组在另一个 View Controller 中填充一个表。代码结构如下:

AppController.swift:

public var BuisnessNames = [NSString]()
[...]
public func updateFeedsMap(){

var query : PFQuery = PFUser.query()!
var objects : [AnyObject]?
var counter = 0

query.whereKey("isProprietor", equalTo: true)
query.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]?, error: NSError?) -> Void in

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
if error == nil {
// The find succeeded.
println("Successfully retrieved \(objects!.count) scores.")
// Do something with the found objects
if let objects = objects as? [PFObject] {
for object in objects {
dispatch_sync(dispatch_get_main_queue()) {
self.BuisnessNames.append(object ["BusinessName"] as! NSString)
}
}
}
} else {
// Log details of the failure
println("Error: \(error!) \(error!.userInfo!)")
}
}
}
}

RootVC.swift(继承自 AppController):

override func viewDidLoad() {
if isUserLoggedIn() {
dispatch_async(dispatch_get_main_queue()){
self.updateFeedsMap()
}
}

RootVC 转至 ViewDidAppear() 中的第三个 View Controller ,它使用 BuisnessNames 数组来填充 TableView 。但是,我目前没有将任何数据传递到表中。我在这上面花了很多时间,但我没有想法,请帮忙!谢谢。

最佳答案

您的错误是您在 viewDidLoad 中请求数据,该过程是异步的。它会先返回。

然后你在 ViewDidAppear() 中触发了一个 segue,但是此时你还没有从服务器接收到任何数据。所以你的 tableview 总是空的。

解决方案:

接收到数据时进行回调。然后用数据做任何你想做的事

一个简单的回调演示

public func updateFeedsMap(completion:()->()){

var query : PFQuery = PFUser.query()!
var objects : [AnyObject]?
var counter = 0

query.whereKey("isProprietor", equalTo: true)
query.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]?, error: NSError?) -> Void in

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
if error == nil {
// The find succeeded.
println("Successfully retrieved \(objects!.count) scores.")
// Do something with the found objects
if let objects = objects as? [PFObject] {
for object in objects {
dispatch_sync(dispatch_get_main_queue()) {
self.BuisnessNames.append(object ["BusinessName"] as! NSString)
}
}
//Here your data prase is done
dispatch_async(dispatch_get_main_queue(), { () -> Void in
completion()
})
}
} else {
// Log details of the failure
println("Error: \(error!) \(error!.userInfo!)")
}
}
}
}

然后,你像这样调用函数

 self.updateFeedsMap { () -> () in
//Here do something with data,reloadTableview or whatever you like
}

关于ios - GCD 实现不适用于 PARSE 查询 (Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30795491/

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