URLSession.shared.dataTaskPublisher在IOS 13.3上不起作用

问题描述 投票:0回答:1

[尝试发出网络请求时,出现错误

finished with error [-999] Error Domain=NSURLErrorDomain Code=-999 "cancelled"

如果我使用URLSession.shared.dataTask而不是URLSession.shared.dataTaskPublisher,它将在IOS 13.3上运行。

这是我的代码:

return  URLSession.shared.dataTaskPublisher(for : request).map{ a in
    return a.data
}
.decode(type: MyResponse.self, decoder: JSONDecoder())
.receive(on: DispatchQueue.main)
.eraseToAnyPublisher()

此代码在IOS 13.2.3上有效。

ios combine nsurlsessiondatatask swift5.1
1个回答
3
投票
因此,将它们放在一起:

var cancellableSet: Set<AnyCancellable> = [] func getMyResponse() { URLSession.shared.dataTaskPublisher(for : request).map{ a in return a.data } .decode(type: MyResponse.self, decoder: JSONDecoder()) .receive(on: DispatchQueue.main) .replaceError(with: MyResponse()) .sink { myResponse in print(myResponse) } .store(in: &cancellableSet) }


2
投票
这是如何使用数据任务发布者的有效示例:

class ViewController: UIViewController { let url = URL(string:"https://apeth.com/pep/manny.jpg")! lazy var pub = URLSession.shared.dataTaskPublisher(for: url) .compactMap {UIImage(data: $0.data)} .receive(on: DispatchQueue.main) var sub : AnyCancellable? override func viewDidLoad() { super.viewDidLoad() let sub = pub.sink(receiveCompletion: {_ in}, receiveValue: {print($0)}) self.sub = sub } }

将显示<UIImage:0x6000008ba490 anonymous {180, 206}>,这是正确的(如您自己转到该URL所见)。

[我要说的是,如果您不说self.sub = sub,您将完全得到所报告的错误:订户sub仅是本地用户,将立即不复存在,并且网络事务被过早取消(有您报告的错误)。

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.