gpt4 book ai didi

ios - NSInvalidArgumentException "Unrecognized selector sent to instance"(使用 MPMoviePlayerController)

转载 作者:可可西里 更新时间:2023-11-01 05:38:46 24 4
gpt4 key购买 nike

好吧,我在 RootViewController 和 DetailViewController 中有一个 TableView,用于显示单条记录的信息。根据本指南,在详细信息页面中,我必须播放多媒体文件并且我正在使用框架 MediaPlayer: http://www.techotopia.com/index.php/Video_Playback_from_within_an_iOS_4_iPhone_Application

看起来一切正常,但是当我点击播放按钮时出现这个错误:

 -[DetailsViewController playmovie]: unrecognized selector sent to instance 0x9117f60

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[DetailsViewController playmovie]: unrecognized selector sent to instance 0x9117f60'

这些是我的文件:

在 AppDelegate 我使用这个导航 Controller :

[...]

// Create a table view controller
RootViewController *rootViewController = [[RootViewController alloc]
initWithStyle:UITableViewStylePlain];

rootViewController.managedObjectContext = context;
rootViewController.entityName = @"Porti";


UINavigationController *aNavigationController = [[UINavigationController alloc]
initWithRootViewController:rootViewController];

self.navigationController = aNavigationController;


UIBarButtonItem *homeButton;
homeButton = [[[UIBarButtonItem alloc] initWithTitle:@" Inizio " style:UIBarButtonItemStyleBordered target:self action:@selector(home)] autorelease];

UIBarButtonItem *barButton;
barButton = [[[UIBarButtonItem alloc] initWithTitle:@" Mappa dei porti " style:UIBarButtonItemStyleBordered target:self action:@selector(caricamappa)] autorelease];

[toolbar setItems:[NSArray arrayWithObjects: homeButton, barButton, nil]];


[window addSubview:[navigationController view]];
[window addSubview:toolbar];
[window makeKeyAndVisible];

[rootViewController release];
[aNavigationController release];

在 RootViewController 我使用这条指令传递给 DetailViewController:

//Push the new table view on the stack
[self.navigationController pushViewController:detailsView animated:YES];
[detailsView release];

DetailsViewController.h

#import <UIKit/UIKit.h>
#import <MessageUI/MessageUI.h>
#import "MLUtils.h"
#import <MediaPlayer/MediaPlayer.h>

@interface DetailsViewController : UIViewController {
IBOutlet UILabel *titleLabel;
IBOutlet UILabel *descriptionLabel;
IBOutlet UIScrollView *descriptionScrollView;
NSString *cityName;
NSString *nomefile;
NSString *extfile;
NSString *description;
}

@property (nonatomic, retain) UILabel *titleLabel;
@property (nonatomic, retain) UILabel *descriptionLabel;
@property (nonatomic, retain) UIScrollView *descriptionScrollView;
@property (nonatomic, retain) NSString *cityName;
@property (nonatomic, retain) NSString *description;
@property (nonatomic, retain) NSString *nomefile;
@property (nonatomic, retain) NSString *extfile;

- (IBAction)playmovie:(id)sender;

@end

这是 DetailsViewController.m

   #import "DetailsViewController.h"

@implementation DetailsViewController
@synthesize titleLabel, descriptionLabel, descriptionScrollView;
@synthesize cityName,description,nomefile, extfile;



// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
[self.titleLabel setText:self.title];
[self.descriptionLabel setText:self.description];

float textHeight = [MLUtils calculateHeightOfTextFromWidth:self.description : descriptionLabel.font :descriptionLabel.frame.size.width :UILineBreakModeWordWrap];

CGRect frame = descriptionLabel.frame;
frame.size.height = textHeight;
descriptionLabel.frame = frame;

CGSize contentSize = descriptionScrollView.contentSize;
contentSize.height = textHeight;
descriptionScrollView.contentSize = contentSize;
}

-(void)playmovie:(id)sender
{

NSString *appNomeFile = self.nomefile;
NSString *appExtFile = self.extfile;

NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:appNomeFile ofType:appExtFile]];

MPMoviePlayerController *moviePlayer =
[[MPMoviePlayerController alloc] initWithContentURL:url];

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlayBackDidFinish:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:moviePlayer];

moviePlayer.controlStyle = MPMovieControlStyleDefault;
moviePlayer.shouldAutoplay = YES;


[self.view addSubview:moviePlayer.view];

[moviePlayer setFullscreen:YES animated:YES];
}

- (void) moviePlayBackDidFinish:(NSNotification*)notification {

MPMoviePlayerController *moviePlayer = [notification object];

[[NSNotificationCenter defaultCenter] removeObserver:self
name:MPMoviePlayerPlaybackDidFinishNotification
object:moviePlayer];

if ([moviePlayer
respondsToSelector:@selector(setFullscreen:animated:)])
{
[moviePlayer.view removeFromSuperview];
}
[moviePlayer release];
}

- (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;
}

// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
//return (interfaceOrientation == UIInterfaceOrientationPortrait);
return YES;
}

- (void)dealloc {
[titleLabel release];
[descriptionLabel release];[descriptionScrollView release];
[cityName release];
[description release];
[nomefile release];
[extfile release];
[super dealloc];
}

@end

我的问题是:我的错误在哪里?我想是在 playmovie 方法的调用中,但我想不出解决办法!

附言
不小心把评论删了,非常抱歉! =(

最佳答案

您似乎是在类而不是对象上调用 playmovie,或者您忘记提供参数。如果您告诉我们您在哪里调用它,那可能会有所帮助。

无论如何,问题是你可能会这样做:

[DetailsViewController playmovie];

[oneDetailsViewController playmovie];

代替:

[oneDetailsViewController playmovie:nil];

这里 oneDetailsViewController 是一个 DetailsViewController* 对象。

编辑

删除您的 XIB 链接,保存,并通过将按钮从按钮拖动(右键单击)到文件所有者来再次创建指向 IBAction 的链接。

关于ios - NSInvalidArgumentException "Unrecognized selector sent to instance"(使用 MPMoviePlayerController),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8151301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com