【发布时间】:2015-12-21 10:19:51
【问题描述】:
这个有点奇怪,所以我会尽力解释。我正在开发 Baby's First iPad App (Swift),在阅读了几本好书、教程等之后,我已经取得了相当大的进步。
有两个应用程序需要通信。一个在我的 macbook(我将称之为 osx_app)上运行,一个在 ipad 上运行。 osx_app 有一个实现MCSessionDelegate 并包含广告商(MCAdvertiserAssistant)和会话对象作为属性的类。当用户点击“开始托管”菜单项时,会话委托子类启动广告商并等待 ipad_app 连接。
同时,ipad_app 有一个实现MCSessionDelegate 并将会话对象作为属性保存的类。主视图控制器实现MCBrowserViewControllerDelegate,并使用MCSessionDelegate 实现对象中的MCSession 创建浏览器。
期望的行为是 ipad_app 在浏览器中看到 osx_app 并连接。 osx_app 显示对话框并接受。建立连接,打印日志条目,并打开一个打开文件对话框以将 pdf 发送到 ipad_app。
这就是奇怪的部分出现的地方。我已经做到了。我让连接运行并发送文件,一切都非常顺利,但我没有实现 ipad_app,它是一个精简的测试应用程序,我用来学习 MC 框架。我在 iphone 模拟器上测试了几次,又在我的 iphone 5s 上测试了几次,效果很好。
然后,当我将代码移植到现有的 ipad_app 代码时,它不起作用。在每个连接状态下,我都会执行一个简单的打印语句来查看发生了什么,据我所知,ipad_app 会尝试连接,而 osx_app 会旋转一分钟然后断开连接。两个控制台都记录“设备连接”和“设备未连接”事件。
有时 ipad_app 会说它已连接到 osx_app,但 osx_app 的日志仍然只是显示“正在连接”。最奇怪的是,现在我拥有的精简 MWE 代码,一个完美运行的代码,不再工作了!我没有对 osx_app 做任何事情!前几次成功了只是侥幸吗?
Anywho,我已经上下搜索了有关此问题的问题和答案,但只有少数人报告了类似的问题,但他们要么没有解决,要么他们的解决方案不起作用。我尝试过使用真实设备,切换模拟器,相互排除 wifi 和蓝牙以查看其中一个或另一个效果更好,禁用加密和禁用防火墙。
我觉得也许我对 OSX 和 iOS 编程太不熟悉了,以至于我以不应该的方式传递了一个对象或其他什么?我什至不知道。
【问题讨论】:
-
我看了更多,发现了一个与我想做的事情相似的应用程序,github.com/jpsim/DeckRocket,但是这个人将一个项目用于他们的 iOS 和 OSX 应用程序。我注意到我发现的每个教程都使用 MCF 与同一应用程序的其他实例进行通信。我在文档中找不到它,但也许它不能用于与两个不同的应用程序进行通信?我会试一试并报告!