Я пытаюсь преобразовать объекты CNContact
в NSData для отправки на другое устройство через многоранговое подключение. Вот мой код для отправки данных контактов:
func sendContactsToPeer(peerId: MCPeerID, contacts: [CNContact]) {
let contactsData: NSData = NSKeyedArchiver.archivedDataWithRootObject(contacts)
do {
try self.session.sendData(NSKeyedArchiver.archivedDataWithRootObject(contactsData), toPeers: self.session.connectedPeers, withMode: MCSessionSendDataMode.Reliable)
} catch {
print("Unable to send contacts data to \(peerId.displayName)")
}
}
А это для получения контактов:
func session(session: MCSession, didReceiveData data: NSData, fromPeer peerID: MCPeerID) {
print("Received data: \(data) From Peer: \(peerID)")
if let contacts: [CNContact] = NSKeyedUnarchiver.unarchiveObjectWithData(data) as? [CNContact] {
self.delegate?.didReceiveContacts(contacts, fromPeer: peerID)
}
}
Вывод оператора печати для NSData
указывает на то, что данные не равны нулю. Но когда я попытался разархивировать объект в массив CNContacts, он возвращает nil. Есть идеи, почему?
Обратите внимание, что я также пытался просто отправить один объект CNContact
вместо их массива, но результаты такие же.