Отправка данных между двумя классами с помощью методов делегата

Я пытаюсь отправить данные между двумя классами через MultipeerConnectivity. Я пытаюсь сделать это с помощью методов делегата.

Я определил этот протокол:

protocol AssetDelegate {
    func changeThisName(data: Data)
}

Мой основной ViewController — это AssetDelegate, и я реализовал эту функцию просто так:

func changeThisName(data: Data) {
    print("changeThisName called")
    if let image = UIImage(data: data) {
        imageViewAsset.image = image
    }
}

Это просто для того, чтобы увидеть, можно ли полученное изображение декодировать и назначить элементу пользовательского интерфейса imageViewAsset.

Этот метод вызывается внутри определенного мной класса «Менеджер» MultipeerConnectivity, который имеет экземпляр в AppDelegate (это определение «одиночки»?)

Мой класс «MPCManager» имеет различные методы делегата MCSession, в частности метод сеанса (didReceive: data), который:

var assetDelegate: AssetDelegate?

func session(_ session: MCSession, didReceive data: Data, fromPeer peerID: MCPeerID) {
    print("Data Recieved: \(data)")
    self.assetDelegate?.changeThisName(data: data)
}

Я вижу print("Data Received:(data)") в журнале консоли. Но я не вижу оператор печати метода changeThisName.

Это вывод журнала консоли. По сути, есть 2 строки, показывающие подключение MPC («другое состояние» и «сеанс подключен»). Затем идут 2 пункта «Полученные данные».

2019-08-14 12:42:29.714402+0100 My App[34860:11895498] [Accessibility] ****************** Loading GAX Client Bundle ****************
2019-08-14 12:42:44.121481+0100 My App[34860:11895563]  [ERROR] ICEStopConnectivityCheck:2688 ICEStopConnectivityCheck() found no ICE check with call id (1193667819)
other state...<MCPeerID: 0x281b541c0 DisplayName = SendDevice>
2019-08-14 12:42:45.493567+0100 My App[34860:11895661]  [ERROR] ProcessEvent:1199   Send BINDING_REQUEST failed(C01A0041).
2019-08-14 12:42:45.542647+0100 My App[34860:11895661]  [ERROR] ProcessEvent:1199   Send BINDING_REQUEST failed(C01A0041).
2019-08-14 12:42:45.586389+0100 My App[34860:11895661]  [ERROR] ProcessEvent:1199   Send BINDING_REQUEST failed(C01A0041).
2019-08-14 12:42:45.641138+0100 My App[34860:11895661]  [ERROR] ProcessEvent:1199   Send BINDING_REQUEST failed(C01A0041).
2019-08-14 12:42:45.730210+0100 My App[34860:11895661]  [ERROR] ProcessEvent:1199   Send BINDING_REQUEST failed(C01A0041).
2019-08-14 12:42:45.795905+0100 My App[34860:11895661]  [ERROR] ProcessEvent:1199   Send BINDING_REQUEST failed(C01A0041).
2019-08-14 12:42:45.968786+0100 My App[34860:11895661]  [ERROR] ProcessEvent:1199   Send BINDING_REQUEST failed(C01A0041).
session connected... <MCPeerID: 0x281b541c0 DisplayName = SendDevice>
2019-08-14 12:42:46.037399+0100 My App[34860:11895661]  [ERROR] ProcessEvent:1199   Send BINDING_REQUEST failed(C01A0041).
2019-08-14 12:42:46.379153+0100 My App[34860:11895661]  [ERROR] ProcessEvent:1199   Send BINDING_REQUEST failed(C01A0041).
2019-08-14 12:42:46.444389+0100 My App[34860:11895661]  [ERROR] ProcessEvent:1199   Send BINDING_REQUEST failed(C01A0041).
2019-08-14 12:42:47.099950+0100 My App[34860:11895661]  [ERROR] ProcessEvent:1199   Send BINDING_REQUEST failed(C01A0041).
2019-08-14 12:42:47.158868+0100 My App[34860:11895661]  [ERROR] ProcessEvent:1199   Send BINDING_REQUEST failed(C01A0041).
2019-08-14 12:42:48.351072+0100 My App[34860:11895661]  [ERROR] ProcessEvent:1199   Send BINDING_REQUEST failed(C01A0041).
2019-08-14 12:42:48.390215+0100 My App[34860:11895661]  [ERROR] ProcessEvent:1199   Send BINDING_REQUEST failed(C01A0041).
2019-08-14 12:42:49.856339+0100 My App[34860:11895661]  [ERROR] ProcessEvent:1199   Send BINDING_REQUEST failed(C01A0041).
2019-08-14 12:42:49.922462+0100 My App[34860:11895661]  [ERROR] ProcessEvent:1199   Send BINDING_REQUEST failed(C01A0041).
Data Recieved: 8269 bytes
2019-08-14 12:42:51.375239+0100 My App[34860:11895661]  [ERROR] ProcessEvent:1199   Send BINDING_REQUEST failed(C01A0041).
2019-08-14 12:42:51.454734+0100 My App[34860:11895661]  [ERROR] ProcessEvent:1199   Send BINDING_REQUEST failed(C01A0041).
2019-08-14 12:42:52.913337+0100 My App[34860:11895661]  [ERROR] ProcessEvent:1199   Send BINDING_REQUEST failed(C01A0041).
2019-08-14 12:42:52.977319+0100 My App[34860:11895661]  [ERROR] ProcessEvent:1199   Send BINDING_REQUEST failed(C01A0041).
Data Recieved: 4569624 bytes
2019-08-14 12:42:54.271102+0100 My App[34860:11895531] [GCKSession] Not in connected state, so giving up for participant [4725ECEB] on channel [0].
2019-08-14 12:42:54.293615+0100 My App[34860:11895531] [GCKSession] Not in connected state, so giving up for participant [4725ECEB] on channel [1].
2019-08-14 12:42:54.306191+0100 My App[34860:11895531]  [ERROR] ICEStopConnectivityCheck:2688 ICEStopConnectivityCheck() found no ICE check with call id (1193667819)
2019-08-14 12:42:54.306387+0100 My App[34860:11895531] [GCKSession] Not in connected state, so giving up for participant [4725ECEB] on channel [2].
2019-08-14 12:42:54.313382+0100 My App[34860:11895531]  [ERROR] ICEStopConnectivityCheck:2688 ICEStopConnectivityCheck() found no ICE check with call id (1193667819)
2019-08-14 12:42:54.313444+0100 My App[34860:11895531] [GCKSession] Not in connected state, so giving up for participant [4725ECEB] on channel [3].
2019-08-14 12:42:54.318396+0100 My App[34860:11895531]  [ERROR] ICEStopConnectivityCheck:2688 ICEStopConnectivityCheck() found no ICE check with call id (1193667819)
2019-08-14 12:42:54.318453+0100 My App[34860:11895531] [GCKSession] Not in connected state, so giving up for participant [4725ECEB] on channel [5].
2019-08-14 12:42:54.323359+0100 My App[34860:11895531]  [ERROR] ICEStopConnectivityCheck:2688 ICEStopConnectivityCheck() found no ICE check with call id (1193667819)
2019-08-14 12:42:54.323407+0100 My App[34860:11895531] [GCKSession] Not in connected state, so giving up for participant [4725ECEB] on channel [6].
2019-08-14 12:42:54.328377+0100 My App[34860:11895531]  [ERROR] ICEStopConnectivityCheck:2688 ICEStopConnectivityCheck() found no ICE check with call id (1193667819)

person jingo_man    schedule 14.08.2019    source источник


Ответы (1)


person    schedule
comment
Благодарю. Я запутался в том, какой класс должен содержать какой код... В вашем примере класс A - это место, куда данные отправляются (получателю)? В моем случае я думаю, что это мой основной класс ViewController, который также содержит IBOutlet моего экземпляра imageView. Но какой тип экземпляра мне нужен для вашего эквивалента var b = B()? Является ли это классом MPCManager (управляющим многоранговым подключением), так как это класс, который будет выполнять запрос на отправку/вызов метода changeThisName(data)? - person jingo_man; 14.08.2019
comment
Есть базовый функционал! Меня сбило с толку создание экземпляра класса B. В моем случае это был мой пользовательский класс MPCManager, и у моего приложения есть экземпляр, который вызывается в AppDelegate (мне было интересно, является ли он синглтоном) и уже существовал. .. Итак, в моей основной функции viewDidLoad() ViewController я добавил appDelegate.mpcManager.assetDelegate = self, повторно запустил, и теперь метод делегата вызывается и отображает изображения в imageView по мере их получения (также пришлось поместить это обновление пользовательского интерфейса в основной нить НОД) - person jingo_man; 14.08.2019