Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS多用户连接—广告客户和浏览器_Ios_Objective C_Xamarin - Fatal编程技术网

iOS多用户连接—广告客户和浏览器

iOS多用户连接—广告客户和浏览器,ios,objective-c,xamarin,Ios,Objective C,Xamarin,我的设置是这样的:我一次运行0到8台设备,可以随时添加或删除设备 我想使用iOS 7多eer框架来连接它们。我在一个受控的环境中工作,我可以在广告客户模式下启动1-7台设备,然后在浏览器模式下启动一台,它们都连接起来 我不确定的是,当我启动设备时,如何知道设备是否需要处于广告客户或浏览器模式?我尝试过默认为广告客户模式X秒,然后切换到浏览器,问题是所有设备可能同时启动,同时关闭广告客户模式 我也考虑过在广告商和浏览器模式下运行设备,但最初的问题是设备会发现自己。另外,我相信我用这种方式连接的设备

我的设置是这样的:我一次运行0到8台设备,可以随时添加或删除设备

我想使用iOS 7多eer框架来连接它们。我在一个受控的环境中工作,我可以在广告客户模式下启动1-7台设备,然后在浏览器模式下启动一台,它们都连接起来

我不确定的是,当我启动设备时,如何知道设备是否需要处于广告客户或浏览器模式?我尝试过默认为广告客户模式X秒,然后切换到浏览器,问题是所有设备可能同时启动,同时关闭广告客户模式

我也考虑过在广告商和浏览器模式下运行设备,但最初的问题是设备会发现自己。另外,我相信我用这种方式连接的设备少了1台


我确信有一种推荐的设置方法,但我找不到任何不假定有一套浏览器和广告客户的方法,有人对此有建议吗?

很容易使所有设备同时成为广告客户和浏览器,这是一种正常的行为(我很确定文档中提到了这一点,我将在稍后搜索并添加链接)

我没有发现设备本身的问题,也许你正在为同一个设备创建两个Peerid

您可能想检查一下。它只是有一些简单的检查,看看是否需要连接/接受连接

广告客户代表
-(无效)广告商:(MCNearbyServiceAdvertiser*)广告商
我收到了同伴的邀请:(McGerid*)peerID
withContext:(NSData*)上下文
邀请处理程序:(void(^)(BOOL accept,MCSession*session))邀请处理程序
{
//仅接受ID低于当前主机的邀请
//如果两个人都接受邀请,则连接将丢失
//然而,这种情况应该一直存在,因为我们只向一个方向发送邀请
if([peerID.displayName比较:self.peerID.displayName]==传感器降级)
{
邀请处理程序(是,self.session);
}
}
浏览器代理
您可能也希望这样做,它稍微小一点,而且两者都是独立的对象。

我创建了两个同名的McGerid,而不是共享对象。在浏览器和广告商之间共享对象和会话似乎可以使它按预期工作。谢谢。
- (void)browser:(MCNearbyServiceBrowser *)browser foundPeer:(MCPeerID *)peerID withDiscoveryInfo:(NSDictionary *)info
{
  // Whenever we find a peer, let's just send them an invitation
  // But only send invites one way
  // TODO: What if display names are the same?
  // TODO: Make timeout configurable
  if ([peerID.displayName compare:self.peerID.displayName] == NSOrderedAscending)
  {
    NSLog(@"Sending invite: Self: %@", self.peerID.displayName);
    [browser invitePeer:peerID
              toSession:self.session
            withContext:nil
                timeout:10];
  }
}