这个代码在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“操作无法完成(Mach error -10844. )”
2012-09-23 03:40:04.777 Midistudio [1017:907]错误(创建MIDI虚拟目的地):-10844:错误域= NSMachErrorDomain代码= -10844“操作无法完成(Mach error -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; } }
解决方法
首先,这一切都在文档中被称为“iOS 6.0发行说明”.那条线说:
Beginning in iOS 6,apps need to have the audio key in their
uibackgroundmodes in order to use CoreMIDI’s MIdisourceCreate and
MIDIDestinationCreate functions. Without the key set,these functions
will return kMIDINotPermitted (-10844).
所以你唯一需要做的(再次,只是指出Kurt回答)在每个目标的主张是这样的:
<key>uibackgroundmodes</key> <array> <string>audio</string> </array>