gpt4 book ai didi

ios - refreshControl 中的完成处理程序有 EXC_BAD_ACCESS 错误

转载 作者:行者123 更新时间:2023-11-28 06:15:40 25 4
gpt4 key购买 nike

我使用 Firebase 作为我的数据结构。我在 UITableView 的 refreshControl 中使用完成处理程序,以便在从 Firebase 加载完所有数据后停止刷新。

override func viewDidLoad() {
super.viewDidLoad()
self.refreshControl = UIRefreshControl()
self.refreshControl!.addTarget(self, action: #selector(refreshData),for: .valueChanged)
self.refreshControl!.attributedTitle = NSAttributedString(string: "Update the data")
refreshData{ _ in
self.refreshControl!.endRefreshing()
}
}

这是我的 refreshData 方法

func refreshData(completionHandler:@escaping (Bool)->() ) {
//Remove old data
self.items.removeAll()
//Renew all data
var ref: DatabaseReference!
ref = Database.database().reference(withPath: "tasks")
//Loading local drafts
var drafts : [Task]!
if let local_drafts = NSKeyedUnarchiver.unarchiveObject(withFile: Task.ArchiveURL.path) as? [Task] {
drafts = local_drafts
}
else{
drafts = []
}
//Reloading the database
ref.observe(.value, with: { snapshot in
var newItems: [Task] = []
self.num_of_tasks = Int(snapshot.childrenCount)
for item in snapshot.children {
//let local = item as! DataSnapshot
//let snapshotValue = local.value as! [String: AnyObject]
//print(snapshotValue["main_content"] as! String!)
let taskItem = Task(snapshot: item as! DataSnapshot)
newItems.append(taskItem!)
}
let merged = drafts + newItems
self.items = merged
completionHandler(true) //THIS LINE HAS ERR_BAD_ACCESS
})
}

我认为问题可能出在viewDidLoad 中的两个refreshData。但我不知道如何解决它。我如何添加带有处理程序的 refreshData 作为选择器?

最佳答案

这不是线程问题。我通过将函数调用包装在另一个函数中来解决它,因为在这一行中

self.refreshControl!.addTarget(self, action: #selector(refreshData),for: .valueChanged)

我尝试使用 refreshData 作为选择器,但实际上,选择器本身没有任何完成处理程序,因此每当用户尝试通过向下拖动场景来更新时都会导致内存错误。所以通过将函数调用包装在另一个函数中

 func refresh(){
refreshData{ [weak self] _ in
if let _ = self {
self?.refreshControl!.endRefreshing()
}
}
}

并在选择器中使用这个函数,它会传递正确的完成处理程序,从而解决问题。

关于ios - refreshControl 中的完成处理程序有 EXC_BAD_ACCESS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45204093/

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