簡體   English   中英

MidiClientCreate“操作無法完成。 (OSStatus錯誤-50。)”

[英]MidiClientCreate “The operation couldn't be completed. (OSStatus error -50.)”

我正在嘗試在復雜的iOS / Objective-C軟件中調試MIDI問題。 它出現在此通話中:

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

大多數情況下,一切正常,但有時返回的OSStatus是-50代碼(錯誤的參數)。

但是,正如您在網上看到的MIDIClientCreate的許多示例中所看到的那樣,顯式參數並不是真正的問題。 我什至試圖擁有一個唯一的名稱,但沒有任何效果。

為了確定搜索方向,我需要對底層客戶端創建中可能引起此錯誤參數問題的內容有一個更精確的了解。

任何猜測都歡迎!

更新:有人在這里遇到相同的問題並解決了。 他說:“這是由未初始化的變量引起的。”

這只是一個指示,但不足以使我誤入歧途...

我聯系了蘋果公司,這是一個內部CoreMIDI錯誤(至少到iOS8.3),直到現在才知道。

來自支持:

MIDIClientCreate本身將僅在兩種情況下返回-50:

1)如果outClient本身為NULL,那么在上面您會忘記獲取客戶端的地址。

2)如果MIDI服務器在內部獲取進程ID時遇到問題

我確保我提供的客戶地址可以,因此在我的情況下是2)。

重現該錯誤:

然后我注意到我對MIDIGetNumberOfSources();進行了多次調用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 Simulator中的iPhone 5上運行該應用程序,每次在我的計算機上重現該錯誤的機會約為50%。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM