Ios 如何在Objective C MultipeerConnectivity框架中传输NSObject数据

Ios 如何在Objective C MultipeerConnectivity框架中传输NSObject数据,ios,objective-c,multipeer-connectivity,Ios,Objective C,Multipeer Connectivity,我是Objective C的新手,目前正在开发基于MultipeerConnectivity网络项目框架的iOS移动应用程序。这个框架为我提供了在设备之间发送消息和接收消息的方法 这里我想通过这个函数发送一个我自己定义的MyMessageNSObject来传输不同类型的数据。但是,我想包括一个NSMutableArray,它在一个消息对象中包含多个信息对象 @interface MyMessage : NSObject { NSMutableArray playersInfo; } @e

我是Objective C的新手,目前正在开发基于
MultipeerConnectivity
网络项目框架的iOS移动应用程序。这个框架为我提供了在设备之间发送消息和接收消息的方法

这里我想通过这个函数发送一个我自己定义的
MyMessage
NSObject来传输不同类型的数据。但是,我想包括一个
NSMutableArray
,它在一个消息对象中包含多个信息对象

@interface MyMessage : NSObject
{
    NSMutableArray playersInfo;
}
@end
我理解在Objective C中,我们不能像这样静态地分配接口类型。相反,我们应该使用指针。但是,在这种情况下,如果我将
playersInfo
设置为指针
NSMutableArray*playersInfo
,则在将对象传输到另一个设备后,另一个设备无法获取
playersInfo
所指向的数据。(我假设
MyMessage
对象将仅使用浅copt进行传输,因此
NSMutableArray*playersInfo
中的数据将不会被传输)在这里,我要问的是如何实现一个可以包含实际NSObject数据的message类

MultipeerConnectivity framework allows you to send NSData using MCSession API . convert your NSArray to NSData then send 
[self.session sendData:messageData toPeers:self.session.connectedPeers with mode:MCSessionSendDataReliable error:&error]

将NSData转换为NSArray

NSArray*数组=[NSKeyedUnarchiver unarchiveObjectWithData:data]

将NSArray转换为NSData

NSString*错误;
NSData*data=[NSPropertyListSerialization dataFromPropertyList:数组格式:NSPropertyListBinaryFormat_v1_0 errorDescription:&error]

与任何实现一样,要发送数据,您需要将原语、结构或对象分解为可通过通信链路传输的数据块。有时这称为序列化(通常应用于对象时)

在iOS中,可以使用NSKeyedArchive/Unarchive序列化对象。因此,在您的示例中,存储在阵列中的每个对象都需要通过符合NSCoding实现归档/非归档逻辑

然后,为了生成序列化数据(NSData对象),您将调用array对象上的archiver。NSArray符合NSCoding协议

您想要达到的深度/深度取决于您的实现。作为实现encodeWithCoder的一部分,您可以决定要对多少对象属性进行编码/解码


我使用此模式与对等方交换数据,但我也使用继承对其进行了扩展-例如,我定义了一个类:myMessageBase,然后将该基类继承到我的各种消息变体中。

您看过了吗?谢谢。是的,我知道我需要将MyMessage对象转换为NSData进行传输。然而,在我的MyMessage类中,我打算放置一个NSMutable数组。如果我只在MyMessage对象上调用Archive,我会丢失对象中NSMutable数组指针指向的数据吗?如果是这样,我应该如何解决?encodeWithCoder的实现将在NSMutableArray上调用encode。您阅读过NSCoding协议参考吗?如果你用谷歌搜索的话,这很简单,而且有很多例子。比如Ray Wenderlich?谢谢。是的,我知道我需要将MyMessage对象转换为NSData进行传输。然而,在我的MyMessage类中,我打算放置一个NSMutable数组。如果我只在MyMessage对象上调用Archive,我会丢失对象中NSMutable数组指针指向的数据吗?如果是,我应该如何解决?