imageView.image из данных не отображается - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь отобразить канал камеры iPhone A на iPhone B. Я делаю это путем преобразования каждого кадра в объект данных, отправки его на iPhone B через MultiPeer Connectivity, а затем преобразования данных обратно в UIImageи отображать это.

После извлечения кадра iPhone A отправляет его:

func sendImageAsData(image: UIImage) {

    if let imageData = image.pngData() {
        print(imageData)
        MultiPeer.instance.send(data: imageData)
    }
}

, а iPhone B получает и анализирует его:

func multiPeer(didReceiveData data: Data) {
    print(data)
    let receivedImage = UIImage(data: data)
    DispatchQueue.main.async {
        self.drawView.image = receivedImage
    }
}

Но все, что я вижу на iPhone Bсторона белый экран.Вывод консоли на стороне iPhone B выводит количество полученных байтов, так что я знаю, что он по крайней мере получает данные.Я также пытался использовать image.jpegData(compressionQuality: 1) для преобразования изображения в данные, но все еще видел только белый экран.

EDIT : я добавил строку print(receivedImage) сразу после let receivedImage = UIImage(data: data)строка, и вывод консоли был:

138990 bytes
nil
139089 bytes
nil
139085 bytes
nil
139492 bytes
nil

Таким образом, изображение не отображается, потому что оно nil.Любой ввод в отношении того, почему будет приветствоваться.

РЕДАКТИРОВАТЬ 2 : Это функция MultiPeer.instance.send(), используемая для отправки данных.

 public func send(data: Data) -> Bool{
    if isConnected {
        do {
            let item = try NSKeyedArchiver.archivedData(withRootObject: data, requiringSecureCoding: true)
            try session.send(item, toPeers: session.connectedPeers, with: MCSessionSendDataMode.reliable)
            return true
        } catch let error {
            printDebug(error.localizedDescription)
            return false
        }
    }
    return false
}
...