- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
考虑到社区遇到的所有错误,我想知道这个 Multipeer Connectivity 框架是否已准备好在现实世界中使用。我认为我设置正确,但我尝试过的所有其他示例项目都遇到了类似的问题。
我遇到的问题可能与 Bonjour 固有的某些问题有关,我无法弄清楚,但基本上问题如下:
MCSession
,有很多同伴。browser:lostPeer:
方法已为该对等点调用并且甚至不再在浏览器中显示为“附近”。session:peer:didChangeState:
方法不会为该点调用。browser:foundPeer:withDiscoveryInfo:
再次“找到”,但它们仍然存在于 session.connectedPeers
NSArray。显然,他们仍然没有收到有关 session 的任何数据或更新,并且实际上没有连接。MCSessionStateNotConnected
注册到 session 中似乎唯一可行的方法是将该对等点重新连接到原始 session 。然后重复调用 session:peer:didChangeState:
,其中 peerID 的新实例是 MCSessionStateConnected
,并且在 peerID 的旧实例调用 后不久MCSessionStateNotConnected
.示例聊天应用程序很好地演示了这个问题:https://developer.apple.com/library/ios/samplecode/MultipeerGroupChat/Introduction/Intro.html
由于似乎没有任何方法可以手动强制从 session 中删除一个对等点,我该怎么办?我应该尝试以某种方式重建 session 吗?
这个框架看起来有点乱,但我试图保留判断力!
最佳答案
我对此类问题的唯一解决方法是在 session 和对等点之间建立 1-1 关系。它使广播的发送变得复杂,但至少允许通过断开连接/删除 session 本身来进行对等级断开连接和清理。
更新
详细说明我的原始答案,为了能够将数据发送到连接的对等点,有必要维护对为每个对等点创建的 session 的引用。为此,我一直在使用可变字典。
在新 session 中发送/接受邀请后,使用 MCSession
委托(delegate)方法更新字典:
- (void)session:(MCSession *)session peer:(MCPeerID *)peerID didChangeState:(MCSessionState)state {
if (state==MCSessionStateConnected){
_myPeerSessions[peerID.displayName] = session;
}
else if (state==MCSessionStateNotConnected){
//This is where the session can be disconnected without
//affecting other peers
[session disconnect];
[_myPeerSessions removeObjectForKey:peerID.displayName];
}
}
可以使用返回字典所有值的方法访问所有对等点,然后返回每个 MCSession
的所有 connectedPeers
(在本例中为一个):
- (NSArray *)allConnectedPeers {
return [[_myPeerSessions allValues] valueForKey:@"connectedPeers"];
}
可以使用如下方法将数据发送到特定节点或通过广播:
- (void)sendData:(NSData *)data toPeerIDs:(NSArray *)remotePeers reliable:(BOOL)reliable error:(NSError *__autoreleasing *)error {
MCSessionSendDataMode mode = (reliable) ? MCSessionSendDataReliable : MCSessionSendDataUnreliable;
for (MCPeerID *peer in remotePeers){
NSError __autoreleasing *currentError = nil;
MCSession *session = _myPeerSessions[peer.displayName];
[session sendData:data toPeers:session.connectedPeers withMode:mode error:currentError];
if (currentError && !error)
*error = *currentError;
}
}
关于ios - Multipeer Connectivity Framework - Lost Peer 留在 session 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23014523/
我只是设法与 svn 陷入了一个奇怪的境地。就工作副本而言,我的一个文件似乎“丢失”了。当我查看服务器或在另一个位置重新 check out 包含文件夹时,文件在那里,但在这个特定的工作副本中,它似乎
我使用的是 Delphi 2007。有时链接到组件的属性会丢失。这通常是操作属性和查找数据集。我有几次进行了一些紧急错误修复并向客户发送了一个版本,因此产生了一些灾难性的结果:-)任何人都知道一种方法
我已经安装了 RabbitMQ Bundle。现在这是我想要做的: Controller :创建Redis-List,将消息推送到客户端,然后将消息发送到队列中,因此可以异步执行较重的后台任务。 但我
我在文件中有一个矩阵,例如: 3 1 2 3 4 5 6 7 8 -9 其中第一行表示方阵阶数。我正在使用以下代码读取文件并将其存储到 vector 中(为了简单起见,我删除了所有 if 检查): #
说 Pokemon 是一个类。考虑这个片段: Pokemon Eve(4,3); //call to constructor, creating first object on the stack E
这真的很奇怪。我正在使用 SQL Server Express 2005,并具有以下连接字符串(在 DotNetNuke web.config 中): Data Source=ELECTROMORPH
我有一个包含两个项目的 C# 解决方案:一个服务(主项目)和一个记录器。该服务使用来自记录器的类。我在服务项目中添加了对记录器项目的引用。在设计时,自动完成工作正常:记录器的类是可见的,我使用的引用有
我最近将valgrind与glib(与gobject)一起使用,效果不是很好。 我在命令行中添加了G_SLICE=always-malloc G_DEBUG=gc-friendly, 但是valgri
从 Delphi 2010 升级后,我丢失了 Delphi XE 中的大部分库路径, 现在,即使是一些简单的应用程序也将无法编译。 有什么方法可以恢复库路径中丢失的目录条目吗? 编辑:我发现了一个令人
我最终使用 Eng. 的方法在 JFileChooser 的 JList 和 JComboBoxes 中自定义了选择颜色。福阿德建议here public void customizeJFileCho
我尝试使用返回字符串的 StreamReader 类的 ReadToEnd() 方法读取 JPG 文件。 但出于某种原因,当我将此字符串写入文件时,它无法打开。 将数据读入字符串时是否丢失了什么? 最
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
基本上,我的问题是:是否有某种方法可以“恢复”因向上转换为非泛型基类型而丢失的类型参数,例如 Object .这是我的意思的一个例子: 假设我收到了一个 Object l来自图书馆,我知道 l是一个
我无法让 UIView 通过多次触摸来响应我想要的方式。基本上某些 UITouches 在 UITouchPhaseBegan 中,但永远不会进入 UITouchPhaseEnded 或 UITouc
我面临一个设计问题,我希望只有一个 JMS 生产者向两个消费者发送消息。只有两台服务器,生产者将开始生成消息,这些消息将对两个消费者进行负载平衡(通过循环)。 在假设一台服务器发生故障的情况下,我确实
我正在尝试创建一些程序以便正确地为测试做好准备,这很快就会完成。但实际上,经过几天对这些代码的研究,我无法找到 valgrind 报告的内存泄漏的实际位置。 我尝试释放几乎所有内部和外部指针。我尝
我想使用 Requests 包连接到 Web 服务的流 API。假设我使用以下代码发送请求、接收响应并在响应行到达时对其进行迭代: import requests r = requests.get('
我有一个类,它被另一个类的方法动态扩展。这些方法中还有一些额外的静态信息,例如。例如: class A # @b = B.new # in initialize def a puts
我想对一个变量进行位移并将移出的位存储在 bool 值中。 类似于: unsigned int i = 1; bool b = rshift(&i); // i now equals 0 and b
我有一个超过 18GB 数据的 9000 万条记录的 MYISAM 表,测试表明它是分区的候选者。 原始架构: CREATE TABLE `email_tracker` ( `id` int(11
我是一名优秀的程序员,十分优秀!