【发布时间】:2011-05-29 13:27:59
【问题描述】:
简而言之,我的应用程序正在这样做:
1)我的主视图(RootViewController)有一个按钮,当我点击它时,它会显示播放器(PlayerViewController):
2) 在我的播放器中,我初始化了我要播放的视频
-> 效果很好,我的电影正在放映中
我的问题:
当我回到我的主视图时:
然后我再次点击按钮,我得到一个*程序接收信号:“EXC_BAD_ACCESS”。*
如果我评论 self.player.contentURL = [self movieURL]; 它可以工作,但是当我允许它时,我遇到了这个问题。
我读到这是由于空指针或内存问题,但我不明白为什么它第一次工作而不是第二次工作。我在 dealloc 方法中释放我的对象。
感谢您的帮助!
布鲁诺。
这是我的代码:
根视图控制器
RootViewController.h
#import <UIKit/UIKit.h>
#import "PlayerViewController.h"
@interface RootViewController : UIViewController {
IBOutlet UIButton * myButton;
}
@property (nonatomic,retain) IBOutlet UIButton * myButton;
-(IBAction)displayPlayer:(id)sender;
- (void) returnToRoot: (PlayerViewController *) controller;
@end
RootViewController.m
#import "RootViewController.h"
@implementation RootViewController
@synthesize myButton;
-(IBAction)displayPlayer:(id)sender
{
PlayerViewController *playerViewController = [[PlayerViewController alloc] initWithNibName:@"PlayerViewController" bundle:nil];
playerViewController.delegate = self;
playerViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController: playerViewController animated: YES];
[playerViewController release];
}
- (void) returnToRoot: (PlayerViewController *) controller
{
[self dismissModalViewControllerAnimated: YES];
}
- (void)viewDidUnload {
[super viewDidUnload];
}
- (void)dealloc {
[super dealloc];
}
@end
播放器视图控制器
PlayerViewController.h
#import <UIKit/UIKit.h>
#import <MediaPlayer/MPMoviePlayerController.h>
@protocol PlayerViewControllerDelegate;
@interface PlayerViewController : UIViewController {
UIView *viewForMovie;
MPMoviePlayerController *player;
}
@property (nonatomic, assign) id <PlayerViewControllerDelegate> delegate;
@property (nonatomic, retain) IBOutlet UIView *viewForMovie;
@property (nonatomic, retain) MPMoviePlayerController *player;
- (NSURL *)movieURL;
-(IBAction)goBackToRoot:(id)sender;
@end
@protocol PlayerViewControllerDelegate
- (void) returnToRoot: (PlayerViewController *) controller;
@end
PlayerViewController.m
#import "PlayerViewController.h"
@implementation PlayerViewController
@synthesize player;
@synthesize viewForMovie;
@synthesize delegate;
- (void)dealloc {
[super dealloc];
[player release];
[viewForMovie release];
}
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"viewDidLoad");
self.player = [[MPMoviePlayerController alloc] init];
[self.player autorelease];
self.player.view.frame = self.viewForMovie.bounds;
self.player.view.autoresizingMask =
UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight;
[self.viewForMovie addSubview:player.view];
self.player.contentURL = [self movieURL];
[self.player play];
}
-(NSURL *)movieURL
{
NSBundle *bundle = [NSBundle mainBundle];
NSString *moviePath =
[bundle
pathForResource:@"myVideo"
ofType:@"mp4"];
if (moviePath) {
return [NSURL fileURLWithPath:moviePath];
} else {
return nil;
}
}
-(IBAction)goBackToRoot:(id)sender{
[self.delegate returnToRoot: self];
}
- (void)viewDidUnload {
[super viewDidUnload];
}
@end
问题
我第二次调用“displayPlayer”时遇到了 EXC_BAD_ACCESS
【问题讨论】:
-
您能否提供您的属性代码(来自@interface?) 至少,如果“play”是一个保留属性,那么您就有内存泄漏。 (你可能会保留一个分配的、初始化的 MPMoviePlayerController。)它并不能解决你的问题,只是想指出它。
-
self.player = [[MPMoviePlayerController alloc] init];不是一个好主意,您应该为此添加自动释放。 player 的属性应定义是否保留。编辑:是的,Malaxeur 说了什么
-
我有我的房产代码。我还在我的播放器上添加了一个自动释放,但我仍然有同样的错误。
-
我把我所有的代码都放在了我的问题中。目前,我还没有找到解决方案,我还在尝试......
标签: objective-c memory-leaks release mpmovieplayercontroller exc-bad-access