首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在CNContact与NSData之间相互转换

在CNContact与NSData之间相互转换
EN

Stack Overflow用户
提问于 2016-04-11 18:33:27
回答 2查看 759关注 0票数 0

我正在尝试将CNContact对象转换为NSData,以便通过多点连接发送到另一台设备。下面是我发送联系人数据的代码:

代码语言:javascript
运行
复制
 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)")
    }
}

这是用来接收联系人的:

代码语言:javascript
运行
复制
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对象,而不是它们的数组,但结果是相同的。

EN

回答 2

Stack Overflow用户

发布于 2016-04-12 10:47:04

我意识到,在上面的代码中,我意外地将CNContact数据归档了两次,而对于取消归档,我只做了一次。更改解压代码如下所示:

代码语言:javascript
运行
复制
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对象归档一次,然后再将其解压,它将无法工作。仍然不知道为什么。

票数 0
EN

Stack Overflow用户

发布于 2017-05-08 14:52:34

查看CNContactVCardSerialization类

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36546221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档