0

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

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

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

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

4

2 回答 2

1

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

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

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

你想去多深/浅取决于你的实现。作为实现 encodeWithCoder 的一部分,您可以决定要编码/解码多少个对象属性。

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

于 2014-04-12T05:30:13.983 回答
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];

于 2014-04-11T07:23:08.673 回答