【问题标题】:Converting CNContact to NSData and vice versa将 CNContact 转换为 NSData,反之亦然
【发布时间】:2016-04-11 10:33:26
【问题描述】:

我正在尝试将 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 的 print 语句有输出,表示数据不为零。但是当我尝试将对象取消归档到 CNContacts 数组中时,它返回 nil。任何想法为什么?

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

【问题讨论】:

    标签: ios swift nsdata multipeer-connectivity cncontact


    【解决方案1】:

    我意识到我在上面的代码中不小心将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 对象并取消归档它,它就不起作用。仍然不知道为什么。

    【讨论】:

      【解决方案2】:

      查看 CNContactVCardSerialization 类

      【讨论】:

        猜你喜欢
        • 2011-10-08
        • 2011-07-27
        • 2020-02-19
        • 2015-01-03
        • 1970-01-01
        • 1970-01-01
        • 2022-01-09
        • 2012-02-16
        • 2010-12-03
        相关资源
        最近更新 更多