推送视图控制器后播放 mp3 的问题
Posted
技术标签:
【中文标题】推送视图控制器后播放 mp3 的问题【英文标题】:problem play an mp3 after pushing viewcontroller 【发布时间】:2011-02-28 20:27:41 【问题描述】:在我的 tableViewController 上
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
我推送我的视图控制器
[self.navigationController pushViewController:[[[UIViewController alloc] initWithNibName:@"myViewController" bundle:nil] autorelease] animated:YES];
在 myViewController 我已经导入 AVFoundation 并通过 IB 添加三个按钮来播放/暂停/停止歌曲
myViewController.h
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
@interface fotos : UIViewController <AVAudioPlayerDelegate>
AVAudioPlayer *player;
@property (nonatomic, retain) AVAudioPlayer *player;
-(IBAction)play:(id)sender;
-(IBAction)pause:(id)sender;
-(IBAction)stop:(id)sender;
我已经以这种方式实现了
myViewController.m
@implementation fotos
@synthesize player;
- (void)viewDidLoad
[super viewDidLoad];
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"peter"
ofType:@"mp3"];
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:filePath];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil];
player.delegate = self;
[player prepareToPlay];
[filePath release];
[fileURL release];
-(IBAction)play:(id)sender
if(!player.playing)
[player play];
-(IBAction)pause:(id)sender
[player pause];
-(IBAction)stop:(id)sender
[player stop];
我已经在 IB 中连接了我的操作,但是当我尝试播放我的文件时,我得到了
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-
[UIViewController play:]: unrecognized selector sent to instance 0x5619e70'
*** Call stack at first throw:
(
0 CoreFoundation 0x01009be9 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x0115e5c2 objc_exception_throw + 47
2 CoreFoundation 0x0100b6fb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
3 CoreFoundation 0x00f7b366 ___forwarding___ + 966
4 CoreFoundation 0x00f7af22 _CF_forwarding_prep_0 + 50
5 UIKit 0x0041ea6e -[UIApplication sendAction:to:from:forEvent:] + 119
6 UIKit 0x004ad1b5 -[UIControl sendAction:to:forEvent:] + 67
7 UIKit 0x004af647 -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 527
8 UIKit 0x004ae1f4 -[UIControl touchesEnded:withEvent:] + 458
9 UIKit 0x004430d1 -[UIWindow _sendTouchesForEvent:] + 567
10 UIKit 0x0042437a -[UIApplication sendEvent:] + 447
11 UIKit 0x00429732 _UIApplicationHandleEvent + 7576
12 GraphicsServices 0x01b18a36 PurpleEventCallback + 1550
13 CoreFoundation 0x00feb064 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
14 CoreFoundation 0x00f4b6f7 __CFRunLoopDoSource1 + 215
15 CoreFoundation 0x00f48983 __CFRunLoopRun + 979
16 CoreFoundation 0x00f48240 CFRunLoopRunSpecific + 208
17 CoreFoundation 0x00f48161 CFRunLoopRunInMode + 97
18 GraphicsServices 0x01b17268 GSEventRunModal + 217
19 GraphicsServices 0x01b1732d GSEventRun + 115
20 UIKit 0x0042d42e UIApplicationMain + 1160
21 Training Cocoa 0x00001bc4 main + 102
22 Training Cocoa 0x00001b55 start + 53
)
terminate called after throwing an instance of 'NSException'
我也尝试在 viewDidLoad 中播放,但没有。
有什么建议吗? 谢谢
【问题讨论】:
【参考方案1】:由于播放器是一个属性,请尝试通过[self player]
引用它
所以你可能有[[self player] play];
【讨论】:
谢谢,很好的回复。我注意到我的新手错误,现在我创建了一个引用 myViewController 的 viewController 并且所有工作 myViewController *myC = [[myViewController alloc] initWithNib ....] 并推送 myC。以上是关于推送视图控制器后播放 mp3 的问题的主要内容,如果未能解决你的问题,请参考以下文章