Загрузка якоря из URL Asyn c не работает - PullRequest
1 голос
/ 05 февраля 2020

Загрузка якоря с помощью LoadAnchorAsyn c (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, субкод = 0x1051e0df c)

enter image description here

Обновление: если я обертываю весь блок кода в блоке DispatchQueue.main.asyn c, это не делает cra sh, но не вызывается ни reveiceCompletion, ни recieveValue

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Вы должны хранить абонента где-то в член

// 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")
}
0 голосов
/ 05 февраля 2020

Попробуйте это

if let url = url {
    let loadRequest = try? Entity.load(contentsOf: url)
    _ = loadRequest.sink(receiveCompletion: { completion in
        // handle completion
    }, receiveValue: { anchor in
        self.arView.scene.addAnchor(anchor)
    })
} else {
        fatalError("no url")
}
...