我正在开发一个需要使用AVFoundation框架播放声音的iOS应用程序.Xcode 4中的工作区结构包含两个项目:
构建实用程序库之后,它会生成一个静态库,该库在主应用程序中用作框架.
因此,当尝试使用下面的代码在主应用程序内播放声音时,它会按预期工作.
NSString *resourcePath = [[NSBundle mainBundle] resourcePath];
NSString *path = [NSString stringWithFormat:@"%@/sound.mp3", resourcePath];
NSURL *url = [NSURL fileURLWithPath:path];
NSError *error = nil;
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url
error:&error];
[audioPlayer play];
Run Code Online (Sandbox Code Playgroud)
相反,当尝试使用与上面相同的代码在实用程序库中播放完全相同的声音(或任何其他声音)时,即使错误为nil且audioPlayer属性值为正确,也不会播放任何声音(数字)频道,持续时间).
我确保AVFoundation框架在两个项目中.
此外,我的类使用AVAudioPlayerDelegate协议并实现这两个方法:
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag;
- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error;
Run Code Online (Sandbox Code Playgroud)
尝试播放声音后,这些方法都不会被调用.
如果我使用AudioToolbox框架,那么它会播放声音.但AVFoundation由于几个原因,我对使用感兴趣.
怎么知道发生了什么?我错过了什么AVFoundation吗?它可能与AVAudioPlayer在静态库中使用有关吗?
提前致谢.
audio objective-c avfoundation xcode4 automatic-ref-counting