2

我希望通过多点连接框架发送和接收 NSManagedObject。

class MyObject: NSManagedObject {

@NSManaged var name: String
@NSManaged var children: NSSet

}

我已经设法发送字符串和字典,但我需要发送一个带有 NSSet 的 NSManagedObject。这可能吗?

这是我尝试过的:

let data = NSKeyedArchiver.archivedDataWithRootObject(nsmanagedobject)

    if session.connectedPeers.count > 0 {

        var error: NSError?
        if !session.sendData(data,toPeers: session.connectedPeers, withMode: .Reliable, error: &error){

            println("SEND ERROR:")
            println(error)

        }

    } else {

        println("NO PEERS CONNECTED!")

    }

func session(session: MCSession!, didReceiveData data: NSData!, fromPeer peerID: MCPeerID!) {

    NSLog("%@", "didReceiveData: \(data.length) bytes")

    let nsmanagedobject = NSKeyedUnarchiver.unarchiveObjectWithData(data) as! MyObject

}
4

3 回答 3

2

将 an 发送NSManagedObject到不同设备的问题在于它已被持久化到源设备上的 Core Data 中,但不能简单地反序列化并插入到目标的持久存储中。

我建议将对象序列化为NSDictionary,发送该数据,然后实现查找或创建以在目标设备上正确插入新的托管对象。

于 2015-09-21T14:08:21.593 回答
1

不,这是不可能的。NSManagedObject 不仅仅是数据的存储,它内部还有一个状态机。

要发送这样的数据,您需要将其转换为更原始的形式、数组、字典等。

于 2015-09-21T14:00:26.037 回答
0

糟糕,我害怕那个。谢谢你的两个答案!看起来我将序列化成字典。

于 2015-09-21T14:38:17.473 回答