我正在尝试将CNContact
对象转换为 NSData 以通过 Multipeer Connectivity 发送到另一台设备。这是我发送联系人数据的代码:
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)
}
}
的 print 语句有输出NSData
,表明数据不为零。但是当我尝试将对象取消归档到 CNContacts 数组中时,它返回 nil。任何想法为什么?
请注意,我也尝试只发送一个CNContact
对象而不是它们的数组,但结果是相同的。