【问题标题】:Updating array value using find object in the background is swift在后台使用 find 对象更新数组值很快
【发布时间】:2020-01-25 14:31:46
【问题描述】:

我正在尝试使用 findObjectsInbackground 从 Parse 检索数据并将其存储在一个数组中。我已经在viewDidLoad() 的独家新闻之外创建了。 我设法检索和打印数据,但它们没有存储在数组中并且它一直是空的! 我使用了self.articalsTableView.reloadData(),但不幸的是数组myArray 仍然是空的。

请帮忙,这已经让我困惑了两天!

import UIKit
import Parse

class FirstViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var articalsTableView: UITableView!

    var myArray = [PFObject]()

override func viewDidLoad() {
        super.viewDidLoad()

let query = PFQuery(className: "Gateshead")
        query.findObjectsInBackground {(objects, error) -> Void in
            if error !=  nil {
                print(error)
            } else {
                if let articals = objects {

                    for artical in articals {
                   // print (articles)   THIS IS WOKING WELL

                        self.myArray.append(artical)
                        self.articalsTableView.reloadData()
                    } 
                } 
            }
        }     
    }
}

【问题讨论】:

    标签: arrays swift xcode


    【解决方案1】:

    findObjectsInback 正在使用后台线程,如果在这种情况下更新 self.articalsTableView,您应该在想要访问 UIKit 内容时分派到 mainThread。 self.articalsTableView.reloadData() 也应该在最后调用(而不是在循环中)。这是为了防止主线程(以更新 self.articalsTableView)和后台线程(以附加 artical)访问 self.myArray 上的竞争条件

    for artical in articals {
       // print (articles)   THIS IS WOKING WELL
       self.myArray.append(artical)
    } 
    
    DispatchQueue.main.async {
      self.articalsTableView.reloadData()
    }
    

    【讨论】:

      猜你喜欢
      • 2021-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 2023-01-16
      • 1970-01-01
      • 2021-11-27
      相关资源
      最近更新 更多