在幾句話,我的應用程序在做的是:EXC_BAD_ACCESS當我改變moviePlayer的contentURL
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)在最低限度,如果「玩」是一個保留屬性,有內存泄漏。 (你可能會保留一個alloc,初始化MPMoviePlayerController。)它不能解決你的問題,但只是想指出它。 – Malaxeur 2010-12-22 17:53:13
self.player = [[MPMoviePlayerController alloc] init];是不是一個好主意,你應該添加一個autorelease。玩家的財產應該定義它是否保留。編輯:雅Malaxeur說 – Joe 2010-12-22 17:56:53