use*_*202 10 midi virtual coremidi
面对两个错误.
此代码适用于iOS 4和5,但在更新到6后,它无法正常工作(
我找到了以下内容,但不知道如何在代码中修复它.
从iOS 6开始,应用程序需要在其UIBackgroundModes中包含音频密钥才能使用CoreMIDI的MIDISourceCreate和MIDIDestinationCreate函数.如果没有密钥集,这些函数将返回kMIDINotPermitted(-10844).
2012-09-23 03:40:04.773 MidiStudio [1017:907]错误(创建MIDI虚拟源): - 10844:错误域= NSMachErrorDomain代码= -10844"操作无法完成.(马赫错误-10844. )"
2012-09-23 03:40:04.777 MidiStudio [1017:907]错误(创建MIDI虚拟目标): - 10844:错误域= NSMachErrorDomain代码= -10844"操作无法完成.(马赫错误-10844. )"
这是'source'的代码:
-(void)setVirtualSourceEnabled:(BOOL)virtualSourceEnabled {
if ( virtualSourceEnabled == self.virtualSourceEnabled ) return;
if ( virtualSourceEnabled ) {
NSString *name = virtualEndpointName ? virtualEndpointName : [[[NSBundle mainBundle] infoDictionary] valueForKey:(NSString*)kCFBundleNameKey];
OSStatus s = MIDISourceCreate(client, (CFStringRef)name, &virtualSourceEndpoint);
NSLogError(s, @"Create MIDI virtual source");
if ( s != noErr ) return;
virtualSourceDestination = [[PGMidiVirtualSourceDestination alloc] initWithMidi:self endpoint:virtualSourceEndpoint];
[delegate midi:self destinationAdded:virtualSourceDestination];
[[NSNotificationCenter defaultCenter] postNotificationName:PGMidiDestinationAddedNotification
object:self
userInfo:[NSDictionary dictionaryWithObject:virtualSourceDestination
forKey:PGMidiEndpointKey]];
} else {
[delegate midi:self destinationRemoved:virtualSourceDestination];
[[NSNotificationCenter defaultCenter] postNotificationName:PGMidiDestinationRemovedNotification
object:self
userInfo:[NSDictionary dictionaryWithObject:virtualSourceDestination
forKey:PGMidiEndpointKey]];
[virtualSourceDestination release]; virtualSourceDestination = nil;
OSStatus s = MIDIEndpointDispose(virtualSourceEndpoint);
NSLogError(s, @"Dispose MIDI virtual source");
virtualSourceEndpoint = NULL;
}
}
Run Code Online (Sandbox Code Playgroud)
Dan*_*ark 14
[把我的笔记放在Kurt的优秀答案上.]
首先,在"iOS 6.0发行说明"文档中都提到了这一点.那条线说:
从iOS 6开始,应用程序需要在其UIBackgroundModes中包含音频密钥才能使用CoreMIDI的MIDISourceCreate和MIDIDestinationCreate函数.如果没有密钥集,这些函数将返回kMIDINotPermitted(-10844).
因此,你需要做的唯一事情(再次,只是指定Kurt回答的内容)在每个目标的plist中都是这样的:
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
Run Code Online (Sandbox Code Playgroud)
您无需更改任何代码.再次阅读该消息:
从iOS 6开始,应用程序需要在其UIBackgroundModes中包含音频密钥
UIBackgroundModes是应用程序Info.plist中的关键.因此,使用Xcode编辑应用程序的Info.plist,并使该键的值为包含该字符串的数组audio.