我正在尝试使用MultipeerConnectivity将MPMediaItem数组传输到另一台设备,因此我可以显示歌曲列表(TableView),从而远程控制对等体。
这段代码对我的音乐库项目进行编码,以便我可以将它们发送给另一个同行。
func encodeLibrary(lib: [MPMediaItem]) -> NSData {
print("before encoding: \(lib.count)")
// --> prints "before encoding: 511"
let data = NSMutableData()
let archiver = NSKeyedArchiver.init(forWritingWithMutableData: data)
archiver.encodeObject(lib, forKey: "data")
archiver.finishEncoding()
let unarchiver = NSKeyedUnarchiver.init(forReadingWithData: data)
let newLib = unarchiver.decodeObjectForKey("data") as! [MPMediaItem]
print("decoded: \(newLib.count)")
// --> prints "decoded: 511"
return data
}
然后在另一个对等体上执行以下代码:
func decodeLibrary(data: NSData) -> [MPMediaItem] {
let unarchiver = NSKeyedUnarchiver.init(forReadingWithData: data)
let lib = unarchiver.decodeObjectForKey("data") as! [MPMediaItem]
print("items: \(lib.count)")
//prints "items: 0"
return lib
}
要发送数据,请使用以下调用:
try! session.sendData(data, toPeers: [peerID], withMode: .Reliable)
这不是en / /解码的问题,因为当你在编码后立即在同一设备上运行解码时它就可以工作了。它前后打印511首歌曲。 在传播时或者我无法想到的任何问题都必须存在问题。 当数据到达另一台设备时,除了这些MPMediaItem之外的所有内容都可用。
我没有收到任何错误,其他部分的通讯工作正常。这个阵列似乎在其他设备上不可用。知道如何解决这个问题吗?
提前致谢, KlixxOne
编辑:实际上阵列在那里,但它没有内容(它在其他设备上有(511个条目))。