gpt4 book ai didi

ios - 将 CNContact 转换为 NSData,反之亦然

转载 作者:行者123 更新时间:2023-11-30 13:31:23 24 4
gpt4 key购买 nike

我正在尝试将 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)
}
}

NSData 的打印语句有输出,这表明数据不为零。但是当我尝试将对象解档到 CNContacts 数组中时,它返回 nil。有什么想法吗?

请注意,我也尝试过仅发送单个 CNContact 对象而不是它们的数组,但结果是相同的。

最佳答案

我意识到我在上面的代码中不小心将 CNContact 数据归档了两次,而对于取消归档我只做了一次。更改用于取消存档的代码如下:

func session(session: MCSession, didReceiveData data: NSData, fromPeer peerID: MCPeerID) {
print("Received data: \(data) From Peer: \(peerID)")

if let contactsData: NSData = NSKeyedUnarchiver.unarchiveObjectWithData(data) as? NSData {
if let contacts: [CNContact] = NSKeyedUnarchiver.unarchiveObjectWithData(contactsData) as? [CNContact] {
self.delegate?.didReceiveContacts(contacts, fromPeer: peerID)
}
}
}

但是,如果我只将 CNContact 对象存档一次并取消存档,则它不起作用。还是不知道为什么。

关于ios - 将 CNContact 转换为 NSData,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36546221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com