2012-03-26 23 views
0

Also das Problem, das ich habe ist zu laden, dass, wenn ich versuche, ein Video auf diese Weise zu laden:Ich erhalte SIGABRT wenn ich versuche, ein Video (Objective-c)

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

} 

Ich erhalte eine SIGARBT geworfen, wo ich im Code wegen einer NSException angegeben. Wenn ich aber schreiben Sie einfach die Zeichenfolge wie folgt:

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

} 

der Code funktioniert völlig in Ordnung. Was könnte das Problem sein? Ich NSLog TempName, um sicherzustellen, dass es die richtige Zeichenfolge enthält, und es ist. Außerdem ist sharedManager.vidName ein NSMutableString. Dies ist das einzige Problem, das mich davon abhält, mein Senior-Projekt abzuschließen und mein College zu beenden, also würde JEDE Hilfe sehr geschätzt werden. Vielen Dank. Hier

ist, was ich im Protokoll erhalten:

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' 
+0

Wenn Sie eine SIGABRT erhalten, dann haben Sie etwas im Protokoll. Posten Sie das. – CodaFi

+0

@CodaFi: Ich werde es jetzt in die Bearbeitung setzen –

Antwort

0

Haben Sie diese Zeile in der Fehlermeldung angezeigt:

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

Was bedeutet, dass die zweite funktioniert nur, weil die iVar ‚url‘ im Gegensatz zu sharedManager.vidName; nicht NULL ist, das kann ich garantieren Null ist, wenn Sie es NSLog.

+0

Ich bin verwirrt, die zweite was funktioniert nur? –

+0

Sie haben zwei Versionen Ihrer viewDidLoad veröffentlicht, nicht wahr? – CodaFi

+0

Whoops. Gehirnfurz. Wenn NSLog sharedManager.vidName ist, ist es nicht null. Die richtige Zeichenfolge wird in sharedManager.vidName gespeichert. Hast du das gemeint? –

1

Check out Konsolenprotokoll und sehen, ob es so etwas wie folgt aus:

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

Wenn ja, dann ist sharedManager.vidName definitiv anders als @ "vid_name", und der Pfad kann nicht erfolgreich gefunden werden. Vielleicht @ "vid_name.mp4"? Dann müssen Sie wahrscheinlich nur

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

mit

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

ersetzen Versuchen Sie es einmal.

+0

Das Konsolenprotokoll sagt das. Ich habe versucht, diese Zeile mit der neuen Codezeile mit dem Typ als Null zu ersetzen, aber es hat immer noch nicht funktioniert :( –

+0

Ok. Bitte zeigen Sie uns die Ausgabe von NSLog (@ "'% @'", TempName); Dort sollte ein banaler Grund, vielleicht unnötiger Platz im Dateinamen, oder so etwas. – lukasz

+0

Ich habe gerade die Ausgabe von NSLog im Logbuch über –

0

Dieses eine der obskursten Dinge, die ich jemals gesehen habe ... eines der vielen in iOS. Ich hatte das gleiche Problem mit einer Datei namens GetLocationVideo.m4v. Ich hatte einige andere Dateien, die gut funktionierten. Einer von ihnen war MVI_1723.MOV. Nach einigen Stunden an etwas arbeiten, das mehr als 1 Sekunde dauern sollte. Ich habe die GetLocationVideo.m4v aus der Referenzliste in Ressourcen in xcode gelöscht. Ich habe die Datei GetLocationVideo.m4v in MVI_1724.MOV umbenannt und in den Ressourcenordner von Xcode zurückversetzt. erneut die App und es hat gut funktioniert. Es scheint, dass xcode die Videodateierweiterung in Großbuchstaben haben muss. .MOV wird funktionieren. Ich habe .MP4 oder irgendeine Erweiterung nicht versucht. Warum? Ich habe keine Ahnung. Es gibt so viele Bugs oder Dinge, die keinen Sinn ergeben, und Sie müssen 10.000 Seiten Dokumentation lesen, die nicht einmal den Versuch wert ist zu verstehen, warum. Mach einfach weiter bis das nächste große Ding vor dir kommt. Ich hoffe, dass dies anderen helfen wird, in der gleichen Weise zu kämpfen.

Verwandte Themen