Swift中设置WKWebView的layer.sublayers为nil引发诡异崩溃
问题:WKWebView子类设置layer.sublayers = nil引发延迟崩溃
这是此前问题的后续。在tableView行选中方法中,主线程执行完Tracker.track("completed didSelect")后发生崩溃,崩溃信息显示崩溃点位于libobjc.A.dylib的objc_msgSend方法中。
通知触发的回调函数已标记@objc,经排查确认崩溃由mediaDisplay!.layer.sublayers = nil引发,但崩溃并非在该行代码执行时发生,而是在发送通知的原方法执行完毕之后才出现。mediaDisplay是WKWebView的子类,此前作为UIView子类使用时无此问题,改为WKWebView子类后才出现该崩溃。此外,即便触发崩溃,path!.renderBeziers仍能正常绘制内容,设置mask = nil也不会导致崩溃,现寻求该问题的原因及解决办法。
相关代码
tableView行选中方法
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { Tracker.track("getting row \(indexPath.row)") let ptv = tableView as? NovilloTableView if ptv!.uiType == .textTable { let gp = Projects.currentProject?.getPaths(type: PaletteView.getCurrentPane()) GitPaths.currentGitPath = gp![indexPath.row] // NotificationCenter.default.post(name: NNames.updateWebText.nn(), object: nil) return } let svgs = Projects.currentProject!.getPaths(type : PaletteView.getCurrentPane()) var gitPath = svgs[indexPath.row] Tracker.track("gitpath is \(gitPath)") var gitPaths = GitPaths.getMediaBoundingBoxes(paths: [gitPath]) guard let pathArrays = gitPath.parseForRegBeziers() else { return } let rslt = pathArrays.0 let regBeziers = pathArrays.1 gitPath.boundingBox = gitPath.getBoundsParamsForPaths(src: regBeziers.isEmpty ? rslt : regBeziers) GitPaths.currentGitPath = gitPath // Tracker.track("sending notification") NotificationCenter.default.post(name: NNames.updateMedia.nn(), object: nil, userInfo: ["path" : gitPath]) Tracker.track("completed didSelect") return }
通知回调方法
@objc func updateMedia(notification : Notification) { let path = (notification.userInfo?["path"] ?? GitPaths.currentGitPath!) as? GitPaths Tracker.track("sublayers: \(mediaDisplay!.layer.sublayers == nil)") mediaDisplay!.layer.sublayers = nil mediaDisplay!.mask = nil // Tracker.track("render beziers for \(path)") // path!.renderBeziers(tgt: mediaDisplay!, path : path) //, data:["style" : "media"]) // refreshMediaInfo() // updateSelectedMedia( src : GitPaths.currentGitPath! ) // return }
内容的提问来源于stack exchange,提问作者Dan Donaldson
相关产品推荐
相关产品推荐

