问题标签 [mcsession]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
437 浏览

ios - MCSession 需要很长时间才能解除分配

我正在使用多点连接。

会话结束时,应用程序进入主菜单,所有网络内容都被释放,然后被释放。

但是我的 dealloc 方法是在主线程中调用的,MCSession对象需要很长时间才能释放自己,我不知道为什么,因此主菜单屏幕冻结。

如果有人知道为什么MCSession会这么长,我很感兴趣。但是如果它来自 MCSession 本身,这样做是一个好的解决方案吗?

编辑:不,这绝对不是一个好的解决方案,因为它使我的应用程序崩溃。无论如何,其他想法?

0 投票
1 回答
990 浏览

multipeer-connectivity - MCNearbyServiceAdvertiser 委托方法从未被调用

使用多点连接框架和附近服务(浏览器和广告商)在设备之间实现具有自动连接以交换少量数据的应用程序。

我建立了一个处理所有连接细节的会话管理器。它的委托是一个视图控制器,以便在接收到数据时处理 UI 的更新。

会话管理器构建:

  • 服务广告商,代表是会话管理器
  • 服务浏览器,代理也是会话管理器

在两台设备上启动应用程序(一台在 Xcode 下获取日志,另一台独立),我通过服务浏览器委托相应的方法收到一条 Found Peer 消息。

正如另一条消息中所述,我比较了 MCPeerID 的 displayName 属性(本地和来自接收的 Peer)来决定两者中的哪一个将发送邀请,从而避免交叉邀请。

正如这里的另一条消息所述,我还添加了“可选”MCSession 委托方法- (void)session:didReceiveCertificate:fromPeer:certificateHandler:

但是,(void)advertiser:didReceiveInvitationFromPeer:withContext:invitationHandler:从不调用 MCNearbyServiceAdvertiser 的委托方法。(void)session:peer:didChangeState:在方法中设置超时后,MCSession 委托方法只收到一条 NotConnected 消息invitePeer:toSession:withContext:timeout:

在提出的各种选择中:

  • Session 初始化为 security nil 和 MCEncryptionNone;
  • 发现信息为零;
  • 邀请中发送的上下文只是一个归档为 NSData 的短字符串。

要进行故障排除:

  • 我检查了所有项目是否存在(会话及其委托、广告商及其委托)。
  • 只要应用程序处于活动状态,服务浏览器和广告商就永远不会停止。

我现在不知道在哪里看!

0 投票
1 回答
169 浏览

ios - 子类化委托问题

我用这个在父类中创建一个 MCSession:

我有两个子类,它们都是父类的子类。我尝试记录每个子类中连接的对等点的数量,都返回 0。此外,在记录时self.mySession我得到这个:

我从未将代表设置为孩子,但似乎认为 MCSession 代表已更改为孩子,而不是与父母呆在一起。每个子视图控制器都说它是委托,我认为为此每个子 VC 都应该说父是委托。我错过了什么?

另外:我正在使用情节提要。两个子 VC 都是嵌入在 NavigationController 中的控制拖动推送序列。导航控制器 > 父级 > 孩子 1 和孩子 2

0 投票
2 回答
1192 浏览

ios - 将传入的 NSStream 转换为 View

我成功地发送了一个 NSData 流。下面的委托方法是获取该流并附加到 NSMutableData self.data。如何获取这些数据并将其转换为 UIView/AVCaptureVideoPreviewLayer(应该显示视频)?我觉得我错过了另一个转换, AVCaptureSession > NSStream > MCSession > NSStream > ?

我用这个发送流:

0 投票
1 回答
873 浏览

ios - 为 MCSession 授权证书

我在钥匙串中创建了一个自签名证书,并且正在使用 MultipeerConnectivity 框架在设备之间传输数据。

当我们创建会话时,我们可以在 MCSession 中邀请对等方时传递 securityIdentity。

但是 securityIdentity 是 NSArray,我们如何在 NSArray 中传递证书以及如何在其中进行身份验证

0 投票
0 回答
192 浏览

ios - iOS McSEssion 中的证书

在 iOS MCSession 中,您可以使用以下方法 initWithPeer:securityIdentity:encryptionPreference 初始化该部分:

大多数在线教程作者都将 securityIdentity 设为 nil。但是,我想知道如果将 nil 留给真正的应用程序是否会造成任何损害(被黑客入侵)。如果是这样,如何为此生成一个 SecIdentityRef?

我发现了以下关于 iOS 中的安全性的文章/讨论,但仍然无法将 SecIdentityRef 与 MCSession 连接起来。

感谢您在我的问题上花费宝贵的时间,任何评论都会有所帮助。

  1. 在 iOS 上保护和加密数据:http: //code.tutsplus.com/tutorials/securing-and-encrypting-data-on-ios--mobile-21263

  2. 如何在 iPhone 钥匙串中建立 SecIdentityRef?(没有 .p12): 如何在 iPhone 钥匙串中建立 SecIdentityRef ?(没有 .p12)

  3. Generate key pair on iphone and print to log as NSString: Generate key pair on iphone and print to log as NSString

0 投票
1 回答
544 浏览

ios - 一次具有多个会话的多人框架?

我正在尝试构建一个多对等网络应用程序,并且我已经为两个用户之间的单个对话做好了一切工作,但是目的是构建一个主-> 详细应用程序,例如 whatsapp,其中您有一个对话列表并点击一个带你进入对话。我遇到的问题是维护多个会话的所有家务。

我的结构是我有一个“对话管理器”,它有一个“对话”数组,它们是具有一系列消息的 MCSession 的包装器。当对话开始时(通过邀请收件人或接受邀请),对话对象(会话)被添加到数组中,该数组是主表视图的数据源。当从列表中选择对话时,在准备转场时,我将对话对象传递给详细视图控制器,并且它的消息数组成为详细屏幕的数据源。

我在尝试使其正常工作时遇到了许多问题,例如消息未在当前不在屏幕上的对话中传递,保持所有会话处于活动状态,不允许同一两个人之间进行多个单独的对话等。

我的具体问题是,大多数示例和教程,包括 Apple 示例应用程序,都集中在一次对话、一个活动会话上。我是在浪费时间试图让这个工作。IE。该框架是否仅设计为一次容纳一个活动会话?

0 投票
0 回答
157 浏览

ios - 多点连接中的会话

有A、B、C、D四个设备,A接B,C接D,A接C,但B和C距离太远,无法连接。

  1. A 和 C 在同一个会话中吗?
  2. B 和 D 在同一个会话中吗?
  3. 他们在会话中如何沟通?
  4. 根据 MCSession 的参考,会话目前最多支持 8 个 peer,但是有 8 个以上的 peer,它是如何工作的?
0 投票
1 回答
664 浏览

ios - 在 iOS 模拟器和设备之间使用 MCSession 发送文件

我有一个 iPad 应用程序,它需要使用对等 Apple 的 Multipeer Connectivity 库将文件从一台设备发送到另一台设备。该文件是一个 zip 文件(我正在使用适用于 iOS 的 ZipArchive:https ://github.com/mattconnolly/ZipArchive ),我正在使用 iOS 模拟器和一台 iPad 设备对其进行测试。当我将文件从 iPad 发送到模拟器时,它总是可以完美运行,但是当我尝试将它从模拟器发送到设备时,它 90% 的时间都失败了。zip 文件通过,但最后缺少几千字节,因此无法解压缩。我正在使用 MCSession 类,它是用于传输的 sendResourceAtURL 函数:

  • 我在 didFinishReceivingResourceWithName 委托方法(在后台线程上运行)中提取文件。
  • 所有 NSError 变量都为零(发送和接收时),没有任何迹象表明有任何问题。
  • 文件的大小并不重要,它在 20 Kb 和超过 1 MB 时的行为方式相同。
  • 两个对等方在传输期间(或之后)永远不会断开连接。

我记录了发送和接收文件的文件大小 3 次:

我目前只有一台 iPad,想弄清楚为什么它只能在一个方向上工作。有任何想法吗?

0 投票
1 回答
1020 浏览

xcode - 尝试在 Swift 的多点连接测试应用程序中使用 NSNotification

一直在关注本教程:

http://www.appcoda.com/intro-multipeer-connectivity-framework-ios-programming/

但一直在将其转换为在 Swift 中工作。但是,在以下问题上遇到了问题:

这是造成麻烦的最后一行,我已经做到了这一点:

但无法将“状态”条目转换为 MCSessionState 类型,出现错误:

任何人都可以帮助...?对 Swift 来说很新,如果这是一个明显的问题,很抱歉......

非常感谢,佛朗哥。


9 月 9 日更新:

首先设置 userInfo 对象的代码如下,据我所知,调用 toRaw() 方法应该只是意味着它把它当作存储一个 Int ...?在这种情况下,我不知道为什么您的原始答案不起作用...


更新 2 9sep:

知道了 !如果其他人遵循相同的教程,则转换函数的完整工作版本如下。非常感谢您的帮助 Edwin Vermeer: