目标 C - 使用多点连接框架发送对象,点未连接

Posted

技术标签:

【中文标题】目标 C - 使用多点连接框架发送对象,点未连接【英文标题】:Objective C - Send Object with Multipeer Connectivity Framework, Peer not connected 【发布时间】:2014-08-27 10:25:16 【问题描述】:

我正在开发一个应用程序,我需要将一个对象发送到另一个应用程序。这两个应用程序使用多点连接框架相互通信。

特别想发送一个叫Order的对象,也就是

@interface Order : NSObject <NSCoding>

@property (strong, nonatomic) NSString *customerName;
@property (strong, nonatomic) NSDate *arrivalTime;
@property (strong, nonatomic) NSNumber *totalPrice;
@property (strong, nonatomic) NSArray *products;

@end

从名为 OrderAndPay 的“客户端”应用程序到名为 POS 的“服务器”应用程序。这是我在我的 OrderAndPay 应用程序委托中发送此对象的方式

NSData *dataToBeSent = [NSKeyedArchiver archivedDataWithRootObject:self.order];
NSError *error = nil;

NSArray *array = [[NSArray alloc] initWithObjects:[self.mpHandler.session connectedPeers], nil];

if ([self.mpHandler.session sendData:dataToBeSent
                            toPeers: array
                           withMode:MCSessionSendDataUnreliable
                              error:&error]) 
    return YES;


return NO;

但结果我总是没有!当我尝试调试时,xCode 说

打印错误描述:Error Domain=MCSession Code=1 "Peers ( ( POS ) ) 未连接" UserInfo=0x16e8bcb0 NSLocalizedDescription=Peers ( ( POS ) ) 未连接

所以看来 POS 没有连接。但正如我之前写的,我让我的同行使用我的MCSession 的方法connectedPeers!!!

我该如何解决?

【问题讨论】:

【参考方案1】:

您必须在两个应用程序中提供相同的 sessionType.. static NSString * const kMCSessionServiceType = @"mcsessionp2p";

 _serviceAdvertiser = [[MCNearbyServiceAdvertiser alloc] initWithPeer:self.peerID
                                                       discoveryInfo:nil
                                                         serviceType:kMCSessionServiceType];


// Create the service browser
_serviceBrowser = [[MCNearbyServiceBrowser alloc] initWithPeer:self.peerID
                                                   serviceType:kMCSessionServiceType

【讨论】:

【参考方案2】:

解决了。我已经更改了 if 语句中的调用

[self.mpHandler.session sendData:dataToBeSent
                            toPeers: [self.mpHandler.session connectedPeers]
                           withMode:MCSessionSendDataUnreliable
                              error:&error]

它成功了。

【讨论】:

以上是关于目标 C - 使用多点连接框架发送对象,点未连接的主要内容,如果未能解决你的问题,请参考以下文章

蓝牙连接立即断开多点框架

多点连接 - 如何设置让一台主机向多个点发送数据?

iOS中通过蓝牙的多点连接框架:如何确定消息是不是“旧”?

多点连接 手动连接/管理点

Wifi 上的多点连接数据流问题

多点连接框架中使用的加密?