外部附件 api 出错,如何使用外部附件

Posted

技术标签:

【中文标题】外部附件 api 出错,如何使用外部附件【英文标题】:external accessory api getting error, how to work with external accessory 【发布时间】:2019-07-05 17:54:11 【问题描述】:

我正在尝试使用外部附件 api,写了一些代码,但我得到了很大的错误。 谁能告诉我,我的问题出在哪里?

这是我写的和我得到的错误

也许这对我的最后一个问题也有帮助

谢谢

var acs = EAAccessory()

override func viewDidLoad() 
    super.viewDidLoad()

    let accessorys = EAAccessoryManager.shared().connectedAccessories.first
    if accessorys != nil

        acs = accessorys!
            acs.delegate = self
    
    let session = EASession(accessory: acs, forProtocol: acs.protocolStrings.description)
    if session != nil 
        session?.outputStream?.delegate = self
        session?.outputStream?.schedule(in: RunLoop.main, forMode: RunLoopMode.defaultRunLoopMode)
        session?.outputStream?.open()
        session?.inputStream?.delegate = self
        session?.inputStream?.schedule(in: RunLoop.main, forMode: RunLoopMode.defaultRunLoopMode)
        session?.inputStream?.open()
    

由于未捕获的异常“EAAccessoryInitException”而终止应用程序,原因:不支持“-init”。 EAAccessoryManager 负责创建所有对象。 *** 首先抛出调用堆栈: (0x1d963b3d 0x1cbeb067 0x1d963a85 0x29bcdf85 0xdfa24 0xdd2b8 0xdee68 0xdf03c 0x230663bb 0x231a06ef 0x231a03a5 0x230660d3 0x231a06ef 0x231a0647 0x231a03a5 0x23065633 0x232f5b1f 0x22e0ce41 0x22c052a1 0x22e0bb11 0x22e1e7c5 0x22e0935b 0x1f244c13 0x1f244acd 0x1f244db7 0x1d91ffdd 0x1d91fb05 0x1d91df51 0x1d8711af 0x1d870fd1 0x22bfee2d 0x22bf9a53 0xe0b18 0x1d05e4eb) libc++abi.dylib:以 NSException 类型的未捕获异常终止

【问题讨论】:

【参考方案1】:

此行无效:

var acs = EAAccessory()

您不能创建“空”EAAccessory。

考虑到你的做法,你的意思可能是:

var acs: EAAccessory!

var acs: EAAccessory?

也就是说,我通常建议将您的附件处理从视图控制器移到模型层。视图控制器通常应该只关注协调视图。它们不是用于驱动与硬件的交互。

【讨论】:

谢谢先生,可以用,但是我找不到任何配件,我喜欢连接mac作为配件,可以吗? Mac 不是配件。我不确定你想在这里做什么。 EAAccessory 通常用于处理自定义 MFi(Made For iPhone)设备。 感谢您的回复先生,我正在尝试制作可以连接到 mac 的核心 midi 应用程序,作为 midi 控制器,我制作了带有网络、wifi 连接的应用程序,但我有延迟,根据苹果20ms 延迟是正常的,但我需要的比这少,所以我想用电缆试试 根据苹果文档:(核心 MIDI 框架提供用于与 MIDI(乐器数字接口)设备通信的 API,包括硬件键盘和合成器。使用扩展坞连接器或网络从 ios 设备连接. 有关使用扩展坞连接器的更多信息,请参阅 Apple 的 MFi 程序)。所以这意味着使用电缆我必须使用 MFI 程序,而且我相信附件框架工作在 MFI 编程的背后,是真的吗?你知道它是怎么可能的吗? MFi 是针对硬件制造商的程序。 EAAccessory 的重点是允许我编写的应用程序与我构建的包含 MFi 芯片的硬件进行通信。这不适用于 Mac/iPhone 通信。我不知道有任何支持的低延迟协议(特别是通过 USB),但您可能想查看rsms.me/peertalk

以上是关于外部附件 api 出错,如何使用外部附件的主要内容,如果未能解决你的问题,请参考以下文章

如何从外部附件异步发送和接收数据

如何使用外部附件设备在设备上播放音乐?

使用苹果“外部附件框架”获取蓝牙设备的名称

iOS 外部附件框架:如何获取特定 MFI 设备的协议字符串

外部附件框架...EADemo问题

使用 iOS 外部附件协议在外部附件上支持多个应用程序