这个有点奇怪,所以我会尽力解释。我正在研究Baby的第一款iPad应用程序(Swift),在阅读了几本好书,教程等后,我已经有了很长的路要走。
有两个需要沟通的应用。一个在我的macbook上运行(我将其称为osx_app),另一个在ipad上运行。 osx_app有一个实现MCSessionDelegate
的类,它包含广告商(MCAdvertiserAssistant
)和会话对象作为属性。当用户点击“Start Hosting”菜单项时,会话委托子类启动广告商并等待ipad_app连接。
同时,ipad_app有一个实现MCSessionDelegate
的类,并将会话对象保存为属性。主视图控制器实现MCBrowserViewControllerDelegate
并使用MCSession
实现者对象中保存的MCSessionDelegate
创建浏览器。
理想的行为是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编程不太熟悉,我以一种我不应该或某种方式传递一个对象?我甚至不知道。
答案 0 :(得分:3)
天啊,我明白了。在ipad_app中,我将MCSessionDelegate
方法session:didReceiveCertificate:fromPeer:certificateHandler
实现为存根。我首先重新编写了MCF的东西,以便我使用自定义广告客户和浏览器而不是助手和用户界面,但这不起作用,所以我搜索了相关内容并发现了这个
Multipeer Connectivity: getting an invitation accepted (using built-in browser VC)
我从ipad_app中删除了存根,但它确实有效!