【发布时间】:2015-12-17 12:33:23
【问题描述】:
我已经成功地将 multiPeer 框架实现到我的应用程序中,并且可以轻松地将图像和字符串传递给其他设备。我的问题是当我尝试传递一个转换为 NSData 的 NSArray 时。当调用 multipeer didReceiveData 数据函数时,我总是会出现以下崩溃:
由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'*** -[NSKeyedUnarchiver initForReadingWithData:]:无法理解的存档
以下是我发送数据的方式:
var myNSData: NSData = NSKeyedArchiver.archivedDataWithRootObject(arrayOfNumbers)
var error : NSError?
self.session.sendData(myNSData, toPeers: self.session.connectedPeers,
withMode: MCSessionSendDataMode.Reliable, error: &error)
if error != nil {
print("Error sending data: \(error?.localizedDescription)")
}
这就是我尝试接收数据的方式:
func session(session: MCSession!, didReceiveData data: NSData!,
fromPeer peerID: MCPeerID!) {
// Called when a peer sends an NSData to us
// This needs to run on the main queue
dispatch_async(dispatch_get_main_queue()) {
// can't convert data back NSArray without crash
var receivedArray:NSArray = NSKeyedUnarchiver.unarchiveObjectWithData(data) as! NSArray
【问题讨论】:
-
arrayOfNumbers 是如何声明的?在调用 sendData 之前 myNSData 是什么样的?
-
arrayOfNumbers 包含什么?是否所有元素都实现了 NSCoding?发送时的数据与接收时的数据是否不同?
-
@Dan arrayOfNumbers 是一个简单的 Ints NSArray,如下所示:arrayOfNumbers = [1,3,5,7,8]。这个 NSArray 声明如下: var arrayOfNumbers:NSArray = []
-
@Valentin arrayOfNumbers 包含 Ints。我在调用 sendData 之前测试了数组,并且将数组 Nsdata 转换回新数组工作正常。但是如果在 didReceieveData 函数中读取它会崩溃。我需要实施 NSCoding 吗?不知道如何
-
我尝试将字符串保存到数组而不是整数,但是当在 didRecieveData func 中读取数据时,我仍然得到与上面相同的崩溃报告