【问题标题】:MidiClientCreate "The operation couldn't be completed. (OSStatus error -50.)"MidiClientCreate “操作无法完成。(OSStatus 错误 -50。)”
【发布时间】:2015-04-02 11:02:45
【问题描述】:

我正在尝试在复杂的 iOS/Objective-C 软件中调试 MIDI 问题。 它出现在此通话中:

OSStatus s;
MIDIClientRef midi_client_ref;
s = MIDIClientCreate((CFStringRef)@"MIDIPlayerSetup MIDI Client", NULL, NULL,
                     &midi_client_ref);

大多数时候一切正常,但有时返回的 OSStatus 是 -50 代码(错误参数)。

但是正如您在网络上的许多 MIDIClientCreate 示例中所看到的那样,显式参数并不是真正的问题。我什至尝试了一个没有效果的唯一名称。

为了确定我的搜索方向,我需要更准确地了解底层客户端创建过程中发生的情况,这可能会引发这个错误的参数问题。

欢迎任何猜测!

更新:有人遇到了同样的问题here 并解决了它。他说“这是由未初始化的变量引起的。”。

这是一个暗示,但不足以让我犯错……

【问题讨论】:

    标签: ios objective-c core-audio coremidi


    【解决方案1】:

    我联系了 Apple,这是一个内部 CoreMIDI 错误(至少在 iOS8.3 之前),直到现在才知道。

    来自支持:

    MIDIClientCreate 本身只会在两种情况下返回 -50:

    1) 如果 outClient 本身为 NULL,那么在上面你忘记了客户端的地址。

    2) 如果 MIDI 服务器在内部获取进程 ID 时遇到问题

    我确保我提供的客户地址没问题,所以在我的情况下是 2)。

    重现错误:

    然后我注意到在潜在错误之前我曾多次调用MIDIGetNumberOfSources();,因此我在其委托中实现了一个示例应用程序:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        NSLog(@"application:didFinishLaunchingWithOptions:");
        for (int i = 0; i < 100000000; i++) {
            MIDIGetNumberOfSources();
        }
        MIDIClientRef client;
        OSStatus s = MIDIClientCreate(CFSTR("iMIDI Client"), NULL, NULL, &client);
        NSLog(@"OSStatus : %d", (int)s);
        return YES;
    }
    

    在装有 iOS 8.3 (12F69) 的 iOS 模拟器中运行 iPhone 5 上的应用程序,每次在我的机器上重现错误的几率约为 50%。

    【讨论】:

      猜你喜欢
      • 2018-01-26
      • 2020-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-10
      • 2019-02-18
      相关资源
      最近更新 更多