0

所以我遇到的问题是,当我尝试以这种方式加载视频时:

-(void) viewDidLoad
{
MyManager *sharedManager = [MyManager sharedManager];
[super viewDidLoad];
NSString *tempName = sharedManager.vidName;
NSLog(@"%@", tempName);

//This is where the problem is being caused
NSString *url = [[NSBundle mainBundle] pathForResource:tempName ofType:@"mp4"];
//This is where I'm getting the SIGABRT thrown
MPMoviePlayerController* theMovie = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:url]];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedCallBack:) name:MPMoviePlayerPlaybackDidFinishNotification object:theMovie];
theMovie.scalingMode = MPMovieScalingModeAspectFit;
[theMovie.view setFrame:self.view.bounds];
[self.view addSubview:theMovie.view];
[theMovie play];

}

由于 NSException,我在代码中指定的位置抛出了 SIGARBT。但是,如果我简单地写出字符串,如下所示:

- (void)viewDidLoad
{
MyManager *sharedManager = [MyManager sharedManager];
[super viewDidLoad];
NSString *tempName = sharedManager.vidName;
NSLog(@"%@", tempName);

//This is the line I changed
NSString *url = [[NSBundle mainBundle] pathForResource:@"vid_name" ofType:@"mp4"];

MPMoviePlayerController* theMovie = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:url]];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedCallBack:) name:MPMoviePlayerPlaybackDidFinishNotification object:theMovie];
theMovie.scalingMode = MPMovieScalingModeAspectFit;
[theMovie.view setFrame:self.view.bounds];
[self.view addSubview:theMovie.view];
[theMovie play];

}

代码工作得很好。问题可能是什么?我 NSLog tempName 以确保它包含正确的字符串并且它是。此外,sharedManager.vidName 是一个 NSMutableString。这是唯一让我无法完成高级项目和大学毕业的问题,因此我们将不胜感激任何帮助。谢谢你。

这是我在日志中得到的内容:

2012-03-26 22:04:52.115 SeniorProject[20502:207] Barbell Incline Bench Press - Medium Grip
2012-03-26 22:04:52.120 SeniorProject[20502:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:]: nil string parameter'
*** Call stack at first throw:
(
0   CoreFoundation                      0x00fb15a9 __exceptionPreprocess + 185
1   libobjc.A.dylib                     0x01105313 objc_exception_throw + 44
2   CoreFoundation                      0x00f69ef8 +[NSException raise:format:arguments:] + 136
3   CoreFoundation                      0x00f69e6a +[NSException raise:format:] + 58
4   Foundation                          0x007e3ab6 -[NSURL(NSURL) initFileURLWithPath:] + 90
5   Foundation                          0x007e3a44 +[NSURL(NSURL) fileURLWithPath:] + 72
6   SeniorProject                       0x000105f4 -[Video viewDidLoad] + 420
7   UIKit                               0x000ef089 -[UIViewController view] + 179
8   UIKit                               0x000ed482 -[UIViewController contentScrollView] + 42
9   UIKit                               0x000fdf25 -[UINavigationController _computeAndApplyScrollContentInsetDeltaForViewController:] + 48
10  UIKit                               0x000fc555 -[UINavigationController _layoutViewController:] + 43
11  UIKit                               0x000fd870 -[UINavigationController _startTransition:fromViewController:toViewController:] + 524
12  UIKit                               0x000f832a -[UINavigationController _startDeferredTransitionIfNeeded] + 266
13  UIKit                               0x000ff562 -[UINavigationController pushViewController:transition:forceImmediate:] + 932
14  UIKit                               0x000f81c4 -[UINavigationController pushViewController:animated:] + 62
15  SeniorProject                       0x00005998 -[ExerciseList goToVideo:] + 328
16  UIKit                               0x0003f4fd -[UIApplication sendAction:to:from:forEvent:] + 119
17  UIKit                               0x000cf799 -[UIControl sendAction:to:forEvent:] + 67
18  UIKit                               0x000d1c2b -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 527
19  UIKit                               0x000d07d8 -[UIControl touchesEnded:withEvent:] + 458
20  UIKit                               0x00063ded -[UIWindow _sendTouchesForEvent:] + 567
21  UIKit                               0x00044c37 -[UIApplication sendEvent:] + 447
22  UIKit                               0x00049f2e _UIApplicationHandleEvent + 7576
23  GraphicsServices                    0x011ea992 PurpleEventCallback + 1550
24  CoreFoundation                      0x00f92944 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
25  CoreFoundation                      0x00ef2cf7 __CFRunLoopDoSource1 + 215
26  CoreFoundation                      0x00eeff83 __CFRunLoopRun + 979
27  CoreFoundation                      0x00eef840 CFRunLoopRunSpecific + 208
28  CoreFoundation                      0x00eef761 CFRunLoopRunInMode + 97
29  GraphicsServices                    0x011e91c4 GSEventRunModal + 217
30  GraphicsServices                    0x011e9289 GSEventRun + 115
31  UIKit                               0x0004dc93 UIApplicationMain + 1160
32  SeniorProject                       0x00001b39 main + 121
33  SeniorProject                       0x00001ab5 start + 53
)
terminate called after throwing an instance of 'NSException'
4

3 回答 3

1

查看控制台日志,看看它是否显示如下内容:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:]: nil string parameter'

如果是这样,那么sharedManager.vidName肯定和@"vid_name"不一样,无法成功找到路径。也许@“vid_name.mp4”?那么你可能只需要更换

NSString *url = [[NSBundle mainBundle] pathForResource:tempName ofType:@"mp4"];

NSString *url = [[NSBundle mainBundle] pathForResource:tempName ofType:nil];

试试看。

于 2012-03-27T01:09:02.230 回答
0

This one of the most obscure things I have even seen ... one of the plenty in iOS. I had the same problem with a file named GetLocationVideo.m4v. I had some other files that worked fine. One of the was MVI_1723.MOV. After several hours working on something that SHOULD take more than 1 second. I deleted the GetLocationVideo.m4v from the reference list in resources in xcode. I renamed the GetLocationVideo.m4v file to MVI_1724.MOV, put it back to the resources folder of Xcode. rerun the app and it worked fine. It appears that xcode needs to have the video file extension in capital. .MOV will work. I have not tried .MP4 or any extension. Why? I have no idea. There are so many bugs or things that do not make any sense and you have to read 10,000 page documentation that is not even worth trying to understand why. Just keep going along till the next big thing comes in front of you. I hope this will help others struggling along the same lines.

于 2013-03-05T18:00:51.633 回答
0

您是否在错误中看到这一行:

'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:]: nil string parameter'

这意味着第二个仅有效,因为 iVar 'url' 不是 NULL 不像sharedManager.vidName;,我可以保证如果你 NSLog 它是 nil 。

于 2012-03-27T01:12:06.123 回答