2013-01-06 29 views
8

मैं यह समझने के लिए संघर्ष कर रहा हूं कि यह क्यों काम नहीं कर रहा है:/हर बार जब मैं प्रोजेक्ट चलाता हूं तो ऐप क्रैश करता है जो मुझे 'एनएसआईएनवालिडअर्गमेंट एक्सेप्शन' फेंक देता है, कारण: '* - [NSURL initFileURLWithPath:]: nil string पैरामीटर 'वीडियो प्लेबैक विफल रहता है - [NSURL initFileURLWithPath:]: nil स्ट्रिंग पैरामीटर

मैंने एक ट्यूटोरियल का पालन किया है (मैं इसके लिए बहुत नया हूं) और यह उसके लिए काम करता है और कोड बिल्कुल वही है .. क्या कोई यह बता सकता है कि क्या चल रहा है पर?

ज फ़ाइल

#import <UIKit/UIKit.h> 
#import <MediaPlayer/MediaPlayer.h> 
#import <QuartzCore/QuartzCore.h> 

@interface FirstViewController : UIViewController { 
    MPMoviePlayerViewController *playerController; 
} 
-(IBAction)playVideo; 
@end 

मीटर फ़ाइल

#import "FirstViewController.h" 

@interface FirstViewController() 

@end 

@implementation FirstViewController 

{ 
    MPMoviePlayerController *mpc; 

} 



- (IBAction)playButton:(id)sender { 

    NSString *stringPath = [[NSBundle mainBundle]pathForResource:@"intro" ofType:@"MP4"]; 
    NSURL *url = [NSURL fileURLWithPath:stringPath]; 

    if(url != nil){ 

    mpc = [[MPMoviePlayerController alloc]initWithContentURL:url]; 

    [mpc setMovieSourceType:MPMovieSourceTypeFile]; 

    [[self view]addSubview:mpc.view]; 

    [mpc setFullscreen:YES]; 

    [mpc play]; 

    } 
    else{ 
     NSLog(@"URL not found"); 

    } 
} 
@end 
+0

किसी से पूछने से पहले रीस दर्राघ का वह देव खाता है जिसका हम उपयोग कर रहे हैं। आपकी सहायता के लिए धन्यवाद –

उत्तर

33

कि सभी का केवल महत्वपूर्ण हिस्सा है:

NSString *stringPath = [[NSBundle mainBundle] pathForResource:@"intro" ofType:@"MP4"]; 
NSURL *url = [NSURL fileURLWithPath:stringPath]; 

मुझे लगता है अपवाद दूसरी पंक्ति के अंदर उठाया है । जिसका अर्थ यह होगा कि stringPath शून्य था, जो तब होगा जब फ़ाइल intro.MP4 वास्तव में आपके ऐप बंडल में नहीं थी।

चेक कि:

  • फ़ाइल स्रोत कोड की अपनी प्रतिलिपि में मौजूद है

  • अपने Xcode प्रोजेक्ट उस फ़ाइल (के लिए एक संदर्भ है अगर यह लाल है, यह फ़ाइल 'isn का मतलब टी वास्तव में मौजूद)

  • एक्सकोड में अपने लक्ष्य में, "बिल्ड चरण" देखें और "कॉपी बंडल संसाधन" निर्माण चरण को प्रकट करें। वह फ़ाइल मौजूद होना चाहिए। यदि ऐसा नहीं है, तो + बटन दबाएं और इसे चुनें।

+0

उत्तर देने के लिए धन्यवाद। दुर्भाग्य से यह अभी भी लॉन्च नहीं हो रहा है और मैंने आपके द्वारा अनुशंसित सब कुछ सुनिश्चित किया है। intro.mp4 अब निश्चित रूप से बंडल में है? मैं बहुत उलझन में हूं कि यह –

+1

लॉन्च क्यों नहीं कर रहा है यह भी जांचें कि आपने सही नाम लिखा है (केस सहित - क्या आप सुनिश्चित हैं कि यह एमपी 4 एमपी 4 नहीं है?)। यह देखने के लिए कि फ़ाइल कहां होनी चाहिए, आप डिस्क पर अपने बिल्ट ऐप के अंदर भी देखना चाहेंगे। –

+0

मैंने .app फ़ाइल की जांच की है और वीडियो मुख्य फ़ोल्डर में है जहां यह होना चाहिए? MP4 पर केस बदलने का भी प्रयास किया लेकिन इससे स्पष्ट रूप से कोई फर्क नहीं पड़ता :( –

6

कर्ट के जवाब विशेष रूप से मेरे लिए काम किया

"Xcode में अपने लक्ष्य में, देखो" के चरण का निर्माण "और पता चलता है" कॉपी बंडल संसाधन "चरण का निर्माण। यही कारण है कि फ़ाइल मौजूद होना चाहिए। यदि यह नहीं है, + बटन दबाएं और इसे चुनें। "

मेरी मूवी फ़ाइल गायब थी। यह पहले वहां होना चाहिए क्योंकि यह काम कर रहा था और फिर यह बंद हो गया।

मैं कर्ट की पोस्ट पर टिप्पणी करता था लेकिन मुझे नहीं पता था कि कैसे। मैंने "वोट दिया" किया।

0

इसके अलावा इस उत्तर में https://stackoverflow.com/a/14179186/3213411 का उल्लेख किया गया है, आप यह भी सुनिश्चित करना चाहते हैं कि जिस फ़ाइल का आप संदर्भ दे रहे हैं वह बिल्ड लक्ष्य में सदस्यता रखता है। आप इसे फाइल इंस्पेक्टर में निर्दिष्ट कर सकते हैं। यह उत्तर बताता है कि कैसे https://stackoverflow.com/a/5300901/3213411

0

आपका वीडियो बहुत लंबा है। इस कोड का उपयोग, सीमा 30 सेकंड है। आपकी सबसे अच्छी शर्त इसे यूआरएल से स्ट्रीम करना है। 30 सेकंड के बाद वीडियो कम करने का प्रयास करें और यह ठीक काम करेगा।

0

आईओएस 9.2, Xcode 7.2, एआरसी सक्षम

मैं हाल ही में इस मामले की छानबीन अपने आप को भाग गया। निश्चित रूप से मूल योगदानकर्ता क्या सुझाव दे रहे हैं। मेरे लिए यह फ़ाइल का वास्तविक नाम था जो मुद्दा था, नीचे देखें ...

NSString *pathForPuzzlePieceHitSound = [[NSBundle mainBundle] pathForResource:@"puzzle_piece_hit" ofType:@"m4a"]; 
NSURL *urlForPuzzlePieceHitSound = [NSURL fileURLWithPath:pathForPuzzlePieceHitSound]; 

AudioServicesCreateSystemSoundID((__bridge CFURLRef)urlForPuzzlePieceHitSound, &idForPuzzlePieceHitSound); 

फ़ाइल नाम:

@"puzzle_piece_hit" 

है उस में अक्षर हैं जो इस विशेष विधि का उपयोग कर फ़ाइल नामकरण के लिए अवैध रूप से कर रहे हैं। मुझे लगता है कि आप इसका इलाज कर सकते हैं और इस मुद्दे को हल कर सकते हैं, लेकिन फ़ाइल का नाम बदलना आसान है।

बाद मैं करने के लिए नाम बदला:

@"puzzlePieceHit" 

सब कुछ ठीक काम किया।

आशा है कि इससे किसी की मदद मिलेगी! चीयर्स।