Я пытаюсь преобразовать CNContact
объектов в NSData, которые будут отправлены на другое устройство через Multipeer Connectivity. Вот мой код для отправки данных контактов:Преобразование 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
вместо массива из них, но результаты те же.