我有一个应用程序在商店一年,很少有人拥有iPhone 4S告诉我声音没有在他们的设备上播放。 (他们听不到任何声音,无论是耳机还是内置扬声器)
我仍然在真实设备(iPhone 3G,3GS,4,ipod 1G,2G,3G,4G,ipad 1,2,3)上进行了测试,一切看似正确。声音正在播放。 (在各种OS上测试:iOS 3.1.2 - > 6.0,它也适用于模拟器)
不幸的是我没有iphone 4S进行测试,因此很难知道这个特定设备出了什么问题。
iPhone声音设置可能有问题吗?
但也许这与我的代码有关? 所以,这是我用来播放声音的代码。
这是对的吗?
在.h ......:
@private AVAudioPlayer* myPlayer;
在.m ...中:
-(IBAction)playMySound{
playerPlay = YES; // it's a bool variable used at an other place in the code
NSString *path;
if((path = [[NSBundle mainBundle]
pathForResource:[NSString stringWithFormat:@"%d", idsound ]
ofType:@"m4a"
inDirectory:@"sounds"]))
{
NSURL *url = [NSURL fileURLWithPath:path];
NSError *error;
myPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
if (myPlayer == nil) {[myPlayer release]; return;}
myPlayer.delegate = self;
[myPlayer play];
}
else return;
}
任何建议都将不胜感激!
答案 0 :(得分:0)
你的代码真的很奇怪:
在这里你正确地创建了播放器:
myPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
您检查是否nil
,仍然正确。
if (myPlayer == nil)
但是你在一个零对象上调用release
,因为对象是零,所以什么都不做:
{[myPlayer release]; return;}
这应该会更好一点:
NSError *error = nil;
myPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
if (myPlayer == nil) {
NSLog(@"Error creating AVAudioPlayer: %@", error);
return;
}
myPlayer.delegate = self;
[myPlayer prepareToPlay];
[myPlayer play];