【发布时间】:2017-12-07 04:53:45
【问题描述】:
我正在努力解决一个问题,即当我使用 Multipeer Connectivity 框架从会话接收数据时,我想更新数据并立即重新加载视图控制器的表。
这是我的 MPCHandler 的 didReceiveData 函数的代码:
func session(_ session: MCSession, didReceive data: Data, fromPeer peerID: MCPeerID) {
NSLog("%@", "didReceive: \(data)")
if var dict: [NSDictionary] = NSKeyedUnarchiver.unarchiveObject(with: data) as? [NSDictionary]{
let d = dict.removeFirst()
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.winnerDataController.syncWinnerFromDictionary(d: dict)
}
}
WinnerDataController 中的同步功能
func syncWinnerFromDictionary(d: NSDictionary){
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
let entityDescription = NSEntityDescription.entity(forEntityName: "Winner", in: context)!
let winner: Winner = NSManagedObject(entity: entityDescription, insertInto: context) as! Winner
winner.setValue(d.value(forKey: "index"), forKey: "index")
winner.setValue(d.value(forKey: "dept"), forKey: "dept")
winner.setValue(d.value(forKey: "name"), forKey: "name")
save()
appDelegate.resultViewController.tableView.reloadData()
}
我想在收到数据后更新并重新加载 resultViewContoller 表。但是,当它转到appDelegate.resultViewController.tableView.reloadData() 时,控制台会给出fatal error: unexpectedly found nil while unwrapping an Optional value。我花了一整天的时间来弄清楚为什么 tableView 是 nil,但仍然没有任何想法。
有人可以帮忙吗?谢谢
我尝试了@Hitesh Sultaniya 提供的以下代码:结果视图控制器中的NotificationCenter.default.addObserver(self, selector: #selector(testing), name: NSNotification.Name(rawValue: "syncWinner"), object: nil) 和func testing(notification: Notification){
print("testing")
self.tableView.reloadData()
}。此外,WinnerDataController 中的NotificationCenter.default.post(name: NSNotification.Name(rawValue: "syncWinner"), object: nil)。
在控制台中,打印“测试”。然而,几秒钟后, “在从主线程访问引擎后,此应用程序正在从后台线程修改自动布局引擎。这可能导致引擎损坏和奇怪的崩溃” 显示。
然后,我尝试了这个:
func testing(notification: Notification){
DispatchQueue.global(qos: .userInitiated).async{
self.tableView.reloadData()
}
}
现在,没有显示错误。但是表还没有重新加载...
【问题讨论】:
标签: ios swift swift3 multipeer-connectivity