Вот несколько вещей, которые нужно проверить: Убедитесь, что вы импортировали инфраструктуру AVFoundation в свой проект и что у вас есть #import <AVFoundation/AVAudioPlayer.h>
в заголовочном файле.
Переместите все ваши методы [освобождения объекта] в конец блока. Это не должно иметь значения, но стоит попробовать.
Используете ли вы последнюю версию iOS? 4.2.1 является самым новым.
Убедитесь, что ваш аудиофайл назван точно tone.m4r - он чувствителен к регистру.
На левой боковой панели разверните «Цели», затем имя вашего приложения, затем «Копировать ресурсы комплекта». Есть ли файл tone.m4r? Если нет, перетащите его внутрь.
Наконец, почему вы создаете AVAudioPlayer * p, а затем устанавливаете его равным self.player (который, я полагаю, вы определили в своем заголовочном файле)? Вместо этого в вашем заголовочном файле в @interface объявите AVAudioPlayer *player;
, если вы этого еще не сделали. После блока @interface, но перед @end, добавьте @property (nonatomic, retain) AVAudioPlayer *player;
, если вы еще этого не сделали.
Заменить
AVAudioPlayer *p =[[AVAudioPlayer alloc] initWithContentsOfURL:file error:nil];
[file release];
self.player = p;
[p release];
с
self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:file error:nil];
[file release];
редактирует:
• Вам не нужно [player setDelegate:self];
• Убедитесь, что у вас есть self.player
, а не просто player
(не должно иметь значения, но это более наглядно).
• Я создал совершенно новый, пустой проект для проверки вашего / моего кода. Смотри ниже.
AudioTesterViewController.h:
#import <UIKit/UIKit.h>
#import <AVFoundation/AVAudioPlayer.h>
@interface AudioTesterViewController : UIViewController {
AVAudioPlayer *player;
}
@property (nonatomic, retain) AVAudioPlayer *player;
- (IBAction)playAudio;
@end
AudioTesterViewController.m:
#import "AudioTesterViewController.h"
@implementation AudioTesterViewController
@synthesize player;
- (void)viewDidLoad {
[super viewDidLoad];
}
- (IBAction)playAudio {
NSString *path = [[NSBundle mainBundle] pathForResource:@"tone" ofType:@"m4r"];
NSURL *file = [[NSURL alloc] initFileURLWithPath:path];
[path release];
self.player =[[AVAudioPlayer alloc] initWithContentsOfURL:file error:nil];
[file release];
[self.player prepareToPlay];
[self.player play];
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)dealloc {
[super dealloc];
}
@end
Примечания:
- (IBAction) playAudio вызывается кнопкой, которую я сделал в Интерфейсном Разработчике, но вы, конечно, можете просто сделать ее функцией void или вместо этого скопировать код в другую функцию.
Если этот код не работает, попробуйте нажать в строке меню Build-> Clean и запустить проект.
Вот моя файловая структура: