如何在Objective C Multipeer Connectivity框架中传输NSObject数据

时间:2014-04-11 05:22:32

标签: ios objective-c multipeer-connectivity

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

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

@interface MyMessage : NSObject
{
    NSMutableArray playersInfo;
}
@end

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

2 个答案:

答案 0 :(得分:1)

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

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

然后,要生成序列化数据(NSData对象),您将调用数组对象上的归档器。 NSArray符合NSCoding协议。

您想要去的深度/浅度取决于您的实施。在实现encodeWithCoder时,您可以决定要编码/解码的对象属性的数量。

我使用此模式与数据交换,但我也使用继承扩展它 - 例如我定义了一个类:myMessageBase然后将该Base类继承到我的各种Message变体中。

答案 1 :(得分:0)

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 withMode:MCSessionSendDataReliable error:& error];

将NSData转换为NSArray

NSArray * array = [NSKeyedUnarchiver unarchiveObjectWithData:data]

将NSArray转换为NSData

NSString *错误; NSData * data = [NSPropertyListSerialization dataFromPropertyList:array format:NSPropertyListBinaryFormat_v1_0 errorDescription:& error];