URLSessionWebSocketTask: Неустранимая ошибка: только одно из сообщений или ошибок должно быть нулевым

Я случайно получаю эту ошибку, так как недавно использовал URLSessionWebSocketTask, что приводит к сбою моей программы каждый раз:

Fatal error: Only one of message or error should be nil

Но я не могу найти конкретный способ воспроизвести это, потому что понятия не имею. Похоже, это не связано с качеством сети или написанным мной небезопасным кодом.

Я хотел бы спросить, не сталкивались ли вы с этой ошибкой недавно? Мне нужно знать, вызвано ли это SDK.

  • Xcode 11.3.1 (11C504)
  • macOS 10.15.3 (19D76)
  • iOS 13.3.1 (17D50)

ps Я искал в Интернете и нашел только эту связанную ветку, и это не помогло.

0 ответов

Покопавшись, я нашел возможное решение, которое можно найти в этом репо под названием websocket-apple на GitHub: ссылка

Я также столкнулся с этой аварией, когда у меня был URLSessionс delegateQueue установлен в .main. В решении, реализованном репозиторием websocket-apple, оболочка вокруг задачи URLSessionWebSocket создает новый OperationQueue и передает его как delegateQueue при инициализации URLSession.

В этом блоке кода delegateQueue перейти в URLSessionсоздается (копируется непосредственно из связанного репо)

private let webSocketQueue: DispatchQueue = DispatchQueue(label: "WebSocket.webSocketQueue")
private lazy var delegateQueue: OperationQueue = {
    let queue = OperationQueue()
    queue.name = "WebSocket.delegateQueue"
    queue.maxConcurrentOperationCount = 1
    queue.underlyingQueue = webSocketQueue
    return queue
}()

И строка 77 имеет инициализацию URLSession:

let session = URLSession(configuration: .default, delegate: delegate, delegateQueue: delegateQueue)
Другие вопросы по тегам