2013-02-07 21 views
11

के माध्यम से प्रस्तुत किया जाना चाहिए मैंने कैमरे से छवि कैप्चर करने के लिए एक एप्लिकेशन बनाया है। यह मेरा कोडआईपैड में अपवाद, UIImagePickerController को UIPopoverController

-(IBAction) showCameraUI { 
    BOOL hasCamera = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]; 
    UIImagePickerController* picker = [[UIImagePickerController alloc] init]; 
    picker.delegate = self; 
    picker.sourceType = hasCamera ? UIImagePickerControllerSourceTypeCamera : UIImagePickerControllerSourceTypePhotoLibrary; 
    [self presentModalViewController:picker animated:YES]; 
} 

है और के लिए इस प्रतिनिधि विधि लागू कैप्चर की गई छवि

- (void)imagePickerController:(UIImagePickerController *)picker 
didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    [picker dismissModalViewControllerAnimated:YES]; 
    UIImage* image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
    UIImage *yourImageView = image; 
} 

इस पद्धति लागू उपयोगकर्ता नियंत्रक रद्द

- (void)imagePickerControllerDidCancel:(UIImagePickerController*)picker 
{ 
    [picker dismissModalViewControllerAnimated:YES]; 
} 

लेकिन यह इस अपवाद से पता चलता है, तो मिलता है। क्या किसी के पास कोई विचार है कि यह फ़ंक्शन शो कैमरेयूआई की अंतिम पंक्ति निष्पादित करने के बाद ऐसा अपवाद क्यों दिखा रहा है।

UIStatusBarStyleBlackTranslucent is not available on this device. 2013-02-07 
10:06:06.976 CaptureImage[460:c07] *** Terminating app due to uncaught exception 
'NSInvalidArgumentException', reason: 'On iPad, UIImagePickerController must be 
presented via UIPopoverController' 
+1

कुछ तरह गलत है, क्योंकि मैं सवाल शीर्षक देखने के रूप में _ "UIStatusBarStyleBlackTranslucent है आईपैड के लिए इस डिवाइस पर उपलब्ध नहीं है "_ – Tricertops

उत्तर

14

अपवाद के संबंध में, त्रुटि संदेश बहुत स्पष्ट है। "आईपैड पर, UIImagePickerController को UIPopoverController के माध्यम से प्रस्तुत किया जाना चाहिए" आईपैड के लिए, आपको इसे [self presentModalViewController:picker animated:YES]; का उपयोग करने के बजाय UIPopoverController में प्रस्तुत करना चाहिए। इस मुद्दे को ठीक करना चाहिए।

उदाहरण के लिए: -

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { 
    UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:picker]; 
    [popover presentPopoverFromRect:self.view.bounds inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
    self.popover = popover; 
} else { 
    [self presentModalViewController:picker animated:YES]; 
} 

संपादित करें: @rmaddy, कैमरे द्वारा उल्लेख किया है रीति से प्रस्तुत किया जा सकता है। उपर्युक्त लागू होता है जब sourceTypeUIImagePickerControllerSourceTypePhotoLibrary है।

+1

हाँ मैंने कोशिश की लेकिन यह इस अपवाद को दिखाता है NSInvalidArgumentException कारण: 'आवेदेटिन ने एक सक्रिय नियंत्रक को प्रस्तुत करने की कोशिश की' बहुत कुछ धन्यवाद आपकी सहायता। – Arun

+1

बस इसे अकेले 'UIPopoverController * popover = [[UIPopoverController alloc] initWithContentViewController: picker]; [popover presentPopoverFromRect: self.view.bounds inView: self.view अनुमति की अनुमति दें निर्देश: UIPopoverArrowDirectionAny एनिमेटेड: हाँ]; '। और इस लाइन का उपयोग सभी '[स्वयं उपस्थित मॉड्यूल व्यू कंट्रोलर: पिकर एनिमेटेड: हाँ]; ' – iDev

+1

यह' NSGenericException 'कारण दिखाता है:' - [UIPopoverController dealloc] पॉपओवर अभी भी दिखाई दे रहा है। मैं आईओएस डेवलपर के लिए नया हूं इसलिए मुझे अपने कौशल में सुधार करने में कुछ मदद चाहिए, जहां मुझे अपनी शिक्षा शुरू करनी चाहिए, मैं सिर्फ एक पुस्तक 'शुरुआती आईपैड एप्लिकेशन डेवलपमेंट' पढ़ता हूं, जहां से – Arun

5

@ अरुण मुझे भी वही समस्या का सामना करना पड़ रहा है जो हेडर फ़ाइल में वैश्विक संपत्ति जोड़ता है।

मुझे आशा है कि नीचे कोड उपयोगी है के लिए आप

UIImagePickerController *imgPicker = [[UIImagePickerController alloc] init]; 
    [imgPicker setDelegate:self]; 
    [imgPicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; 
    [imgPicker setAllowsEditing:YES]; 
    [imgPicker setModalPresentationStyle:UIModalPresentationCurrentContext]; 

    UIPopoverController *popOver = [[UIPopoverController alloc] initWithContentViewController:imgPicker]; 
    popOver.delegate = self; 
    self.popoverImageViewController = popOver; 
    [self.popoverImageViewController presentPopoverFromRect:CGRectMake(0, 0, 160, 40) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

कि हेडर फाइल में वैश्विक संपत्ति बनाने के इस

@property (strong) UIPopoverController *popoverImageViewController;