swift - 从 url 异步加载锚点不起作用
问题描述
使用 LoadAnchorAsync(contentsOf: URL) 加载锚点不起作用。这是我的代码:
if let url = url {
let loadRequest = Entity.loadAnchorAsync(contentsOf: url)
_ = loadRequest.sink(receiveCompletion: { completion in
// handle completion
}, receiveValue: { anchor in
self.arView.scene.addAnchor(anchor)
})
} else {
fatalError("no url")
}
但这每次都会崩溃并出现错误:
线程 27:EXC_BREAKPOINT(代码=1,子代码=0x1051e0dfc)
更新:如果我将整个代码块包装在 DispatchQueue.main.async 块中,它不会崩溃,但不会调用 reveiceCompletion 或 recieveValue
解决方案
您必须将订阅者存储在成员中的某个位置
// somewhere above
private var subscribers: Set<AnyCancellable>()
...
if let url = url {
let loadRequest = Entity.loadAnchorAsync(contentsOf: url)
loadRequest.sink(receiveCompletion: { completion in
// handle completion
}, receiveValue: { anchor in
self.arView.scene.addAnchor(anchor)
}).store(in: &self.subscribers) // << keep it alive
} else {
fatalError("no url")
}
推荐阅读
- mysql - 如何通过 Docker 在生产环境中处理数据备份
- elasticsearch - Elasticsearch 滚动查询返回错误
- python - 我的代码在超过 15500 次迭代时突然停止编写
- amazon-web-services - 如何将 AWS EC2 负载均衡器添加到与我的静态前端相同的域
- julia - 具有邻接矩阵的 Dijkstra 算法
- php - 我想复制 $friendname=$_POST['friendname']; 当 if 语句有效并在此处回显时,值到下一页
- xamarin - 在 Xamarin Forms 中使用邮件服务时,我们如何获取 SmtpServer NetworkCredentials?
- ruby - 无法安装 vagrant-hostsupdater
- reactjs - 在 cPanel 上部署 React 应用程序后,Web 目录可见
- python - .replace() 不替换元素