UIImagePickerController त्रुटि: iOS 7 में एक खाली स्नैपशॉट में परिणाम प्रस्तुत नहीं किए गए दृश्य स्नैपशॉट करना


103

मुझे यह त्रुटि केवल iOS 7 में मिल रही है और एप्लिकेशन क्रैश हो गया है। आईओएस 6 में, मुझे कभी भी कोई त्रुटि नहीं मिलती है, बस एक बार मेमोरी चेतावनी जब कैमरा खोलते हैं।

Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates.

यहाँ मैं क्या कर रहा हूँ।

imagePicker = [[UIImagePickerController alloc] init];
[imagePicker setDelegate:self];
[imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
[imagePicker setAllowsEditing:YES];

[self presentModalViewController:imagePicker animated:YES];

मैंने देरी करने की कोशिश की presentModalViewController, लेकिन मुझे अभी भी वही संदेश मिल रहा है। कुछ सेकंड (7-10) के बाद, एप्लिकेशन क्रैश हो गया।

यह त्रुटि केवल iOS 7 में मौजूद है।

किसी को भी सुराग है?


3
मेरी भी यही समस्या है। IOS7 पर UIIMagePickerController अब काम नहीं कर रही है।
condor304

इस विधि को बुलाकर मेरे लिए काम किया। अपना दृष्टिकोण प्रस्तुत करने के बाद इसे रखें। [yourViewBeingPresented.view LayoutIfNeeded];
बॉबी

जवाबों:


32

IOS7 में समस्या संक्रमण के साथ है। ऐसा लगता है कि यदि एक पिछला संक्रमण पूरा नहीं हुआ और आप एक नया लॉन्च करते हैं, तो iOS7 विचारों को गड़बड़ कर देता है, जहां iOS6 इसे सही तरीके से प्रबंधित करता है।

आपको अपने कैमरे को अपने में इनिशियलाइज़ करना चाहिए UIViewController, केवल देखने के बाद लोड किया गया है और एक टाइमआउट के साथ:

- (void)viewDidAppear:(BOOL)animated 
{
    [super viewDidAppear:animated];
    //show camera...
    if (!hasLoadedCamera)
        [self performSelector:@selector(showcamera) withObject:nil afterDelay:0.3];
}

और यहाँ इनिशियलाइज़ेशन कोड है

- (void)showcamera {
    imagePicker = [[UIImagePickerController alloc] init];
    [imagePicker setDelegate:self];
    [imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
    [imagePicker setAllowsEditing:YES];

    [self presentModalViewController:imagePicker animated:YES];
}

1
यह अब तक काम करने लगता है, मैंने एक दूसरे को बिना किसी समस्या के एक के बाद एक 10 पिक्स लेते हुए इसे परखा है।
DevC

3
presentModalViewController iOS 6 में पदावनत किया गया था। यह सुझाव दिया जाता है कि अब presentViewController का उपयोग किया जाए।
ग्लीमोन

5
IOS8 के लिए एक ही परेशानी और तय।
योहानी शौचेनका

1
मैं एक UIAertControl से यह काम करने की कोशिश कर रहा हूं - एक विकल्प फोटो ब्राउज़र के लिए छवि पिकर पेश करना है - यह ठीक काम करता है और दूसरा कैमरा के लिए पेश करना है - यह नहीं है। मैं उपयोग करते समय देरी में निर्माण नहीं करूंगा। एक UIALertController?
साइमनइंडवर

3
मैं कैमरे को viewDidAppear / Load में इनिशियलाइज़ नहीं करता। मेरे पास एक टेबलव्यू है, और मैं टेबलव्यू विकल्पों में से एक के जवाब में कैमरा लाता हूं। और मुझे यह त्रुटि संदेश मिलता है। कोई विचार?
हेनिंग

18

यह त्रुटि मेरे लिए Apple के PhotoPicker नमूना कोड परियोजना के साथ भी दिखाई दी।

मैं एक iPhone 4 पर Xcode संस्करण 5.0 और iOS 7.0.3 का उपयोग कर रहा था।

प्रजनन करने कि प्रक्रिया:

  1. Https://developer.apple.com/library/ios/samplecode/PhotoPicker/Introduction/Intro.html पर Apple का PhotoPicker नमूना प्रोजेक्ट डाउनलोड करें

  2. APLViewController.m में लाइन 125 पर टिप्पणी करें

    //imagePickerController.showsCameraControls = NO;

  3. APLViewController.m में 130-133 लाइनों की टिप्पणी करें

    //[[NSBundle mainBundle] loadNibNamed:@"OverlayView" owner:self options:nil];
    // self.overlayView.frame = imagePickerController.cameraOverlayView.frame;
    // imagePickerController.cameraOverlayView = self.overlayView;
    // self.overlayView = nil;

  4. ऐप बनाएं और लॉन्च करें।

  5. लॉन्च होने के बाद, डिवाइस को लैंडस्केप मोड में घुमाएं।

  6. कैमरा मोड में UIImagePickerController खोलने के लिए कैमरा आइकन पर क्लिक करें।

  7. कंसोल आउटपुट देखें।

कंसोल आउटपुट

PhotoPicker [२४०: ६० बी] स्नैपशॉट को एक दृश्य में प्रस्तुत किया गया है, जिसके परिणामस्वरूप खाली स्नैपशॉट में परिणाम नहीं दिए गए हैं। सुनिश्चित करें कि स्क्रीन अपडेट के बाद स्नैपशॉट या स्नैपशॉट से पहले आपका दृश्य कम से कम एक बार प्रस्तुत किया गया है।

showCameraControls संपत्ति

मेरे लिए यह समस्या तब होती है जब इसका मूल्य YES (डिफ़ॉल्ट) होता है।

इसे NO पर सेट करने से संदेश समाप्त हो जाता है।

बग रिपोर्ट

मैंने अभी Apple के साथ एक बग रिपोर्ट दायर की है।

मैंने कई सुझावों की कोशिश की है जो विभिन्न पदों में किए गए हैं, लेकिन संतोषजनक समाधान नहीं मिला है।


1
सेब ने आपको क्या जवाब दिया? मैं एक ही समस्या है और stackoverflow में समाधान काम नहीं करता है।
Heekyu

मैंने इस पर अभी तक Apple से नहीं सुना है। अगर मुझे उनसे कोई प्रतिक्रिया मिलती है तो मैं एक उत्तर पोस्ट करूंगा।
स्कॉट कार्टर

Apple से कोई खबर? @ScottCarter
बेंजामिन टूएज

1
बस फिर से जाँच की। 2 नवंबर 2013 को दायर किए जाने के बाद से खुले बग पर कोई कार्रवाई नहीं की गई।
स्कॉट कार्टर

यह Bugreport.apple.com पर बग 15377241 है
स्कॉट कार्टर

11

मुझे समस्या तब हुई जब मैंने एक पॉपओवर के अंदर कैमरा दृश्य प्रस्तुत करने का प्रयास किया। IOS6 के तहत यह कोई समस्या नहीं थी लेकिन iOS7 में मुझे संदेश मिला

Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates.

भी।

हालाँकि, जब मैंने कैमरा पिक्चर की प्रस्तुति को फुलस्क्रीन में बदल दिया, जैसा कि टेकिंग पिक्चर्स और मूवीज़ में वर्णित है , iOS डेवलपर लाइब्रेरी सबकुछ फिर से ठीक हो गया और संदेश फिर कभी नहीं दिखाई दिया। हालाँकि मुझे यह सुनिश्चित करना था कि ऐप किस मोड पर निर्भर करता है (यानी, कैमरा व्यू या फोटो रोल प्रस्तुत करना) मुझे या तो पॉपओवर या व्यू कंट्रोलर को खारिज करना पड़ा जब भी विधि - (void) imagePickerControllerDidCancel: (UIImagePickerController *) pickerको बुलाया गया।


3
cameraUI.modalPresentationStyle = UIModalPresentationFullScreen; मेरे लिये कार्य करता है। यह एकमात्र ऐसी चीज है जो यहां सफल रही है। धन्यवाद!
daveMac

2
आखिरकार! मुझे यह समस्या कई बार हुई है और कभी भी एक अच्छा समाधान नहीं मिला है। प्रश्न सूत्र में और नीचे न देखने के लिए अब इतना मूर्खता महसूस करें - imagePicker.modalPresentationStyle = UIModalPresentationFullScreen; मेरे लिए यह हल किया। यह स्वीकृत उत्तर होना चाहिए :)
woobione

6

एक संपत्ति बनाएँ

@property (nonatomic) UIImagePickerController *imagePickerController;

फिर

UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.modalPresentationStyle = UIModalPresentationCurrentContext;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.allowsEditing = YES;
self.imagePickerController = picker;
[self presentViewController:self.imagePickerController animated:YES completion:nil];

इससे समस्या हल हो जानी चाहिए


3
picker.modalPresentationStyle = UIModalPresentationCurrentContext; मेरे लिए अंतर बना।
श्री बर्ना

1
यह पहली बार पिकर प्रस्तुत करने का काम करता है, लेकिन इसके बाद चेतावनी वापस आ जाती है।
daveMac

मैं पिकर .odalPresentationStyle = UIModalPresentationCurrentContext की पुष्टि करता हूं; मेरे लिए आईओएस 8 में गलत लेआउट की समस्या हल करता है
जोओ न्यून्स

मेरे लिए काम नहीं कर रहा है - इसे iOS 8.1.3
एंडी

यह आशाजनक लग रहा था, लेकिन स्नैपशॉटिंग समस्या के लिए मेरे लिए कुछ भी नहीं किया और तस्वीर के एक हिस्से के आसपास एक बेकार फ्रेम को प्रदर्शित किया गया।
आकर्षित ..

4

मैंने इस कोड का उपयोग समस्या को हल करने के लिए किया है:

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
[imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
[imagePicker setDelegate:self];

if ([self respondsToSelector:@selector(presentViewController:animated:completion:)]){
    [imagePicker setShowsCameraControls:NO];
    [self presentViewController:imagePicker animated:YES completion:^{
        [imagePicker setShowsCameraControls:YES];
    }];
} else {
    [imagePicker setShowsCameraControls:YES];
    [self presentModalViewController:imagePicker animated:YES];
}

1
जबकि विचार सिद्धांत रूप में काम करता है, दुर्भाग्य से दिखाए गए नियंत्रण काम नहीं करते हैं या सही ढंग से प्रकट नहीं होते हैं।
daveMac

और यह चेतावनी से छुटकारा नहीं मिला (या मेरे लिए कम से कम)
ईजी अकपिनार

3

मेरे पास एक ही मुद्दा है और एक हल मिला। मुझे लगता है, वह त्रुटि आपके आवेदन के उन्मुखीकरण से संबंधित है। मेरा एप्लिकेशन केवल लैंडस्केप मोड का उपयोग करता है, लेकिन UIImagePickerController पोर्ट्रेट मोड का उपयोग करता है। मैं main.m में try-catch ब्लॉक जोड़ता हूं, और वास्तविक अपवाद प्राप्त करता हूं:

Supported orientations has no common orientation with the application, and shouldAutorotate is returning YES

मैं इस समस्या को कैसे हल करूं:

1) लक्ष्य-> सामान्य, या .plist फ़ाइल में डिवाइस ओरिएंटेशन को रीचेक करें: समर्थित इंटरफ़ेस ओरिएंटेशन: लैंडस्केप लेफ्ट, लैंडस्केप राइट।

2) AppDelegate.m में जोड़ें:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
    return UIInterfaceOrientationMaskLandscape | UIInterfaceOrientationMaskPortrait;
}

इस चरण के बाद UIImagePickerController ठीक से काम करता है, लेकिन मेरे विचारक को चित्र मोड में घुमाया जा सकता है। तो, इसे हल करने के लिए:

3) UINavigationController के लिए एक श्रेणी बनाएँ, (समर्थितInterfaceOrientations UIViewController से iOS6 में UINavigationController के लिए ले जाया गया):

@implementation UINavigationController (RotationIOS6)

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

@end

यह समाधान iOS 6.0, 6.1, 7.0 पर ठीक से काम करता है। उम्मीद है की यह मदद करेगा।


1
मैं एक पोर्ट-मोड ऐप ठीक कर रहा हूं जो ओपी में उल्लिखित त्रुटि देता है। तो ऐसा लगेगा कि आपका समाधान सार्वभौमिक रूप से लागू नहीं है।
जॉन सिप

क्या आपने main.m में try-catch ब्लॉक को जोड़ने और अपवाद और स्टैक्ट्रेस प्रिंट करने की कोशिश की?
रोमन एर्मोलोव


@ जॉन कोह, इस तरह।
रोमन एर्मोलोव

3

IOS SDK 6.1, परिनियोजन लक्ष्य iOS 6.1 और iOS 7 पावर्ड iPhone पर रनिंग ऐप के साथ ऐप बनाते समय मुझे यह त्रुटि मिलती है। एप्लिकेशन क्रैश नहीं करता है, लेकिन कार्यान्वयन UIViewController shouldAutorotateविधि मुझे त्रुटि संदेश निकालने में मदद करती है।

- (BOOL)shouldAutorotate {
    return YES;
}

3

मेरे पास एक ही मुद्दा था जब मैं डेमो ऐप में एवररी एसडीके के साथ आने वाले डेमो ऐप को संशोधित करने की कोशिश कर रहा था , यह केवल कैमरा रोल से ली गई तस्वीर को संपादित कर सकता है। कैमरे से कैप्चर करके फ़ोटो को संपादित करने का प्रयास करने के लिए, मैंने पहली बार UIViewcontroller.m फ़ाइल में निम्न कोड जोड़ा:

#pragma mark - Take Picture from Camera
- (void)showCamera
{
//[self launchPhotoEditorWithImage:sampleImage highResolutionImage:nil];

    if ([self hasValidAPIKey]) {
        UIImagePickerController * imagePicker = [UIImagePickerController new];
        [imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
        [imagePicker setDelegate:self];
        [imagePicker setAllowsEditing:YES]; //important, must have

        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
            [self presentViewController:imagePicker animated:YES completion:nil];
        }else{
            [self presentViewControllerInPopover:imagePicker];
        }
    }
}

फिर जब मैं एप्लिकेशन चलाता हूं, तो त्रुटि हुई:

Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates.

त्रुटि को हल करने के लिए, अपने UIViewContooler.m फ़ाइल में UIImagePicker प्रतिनिधि को नीचे दिखाए अनुसार संशोधित करें:

#pragma mark - UIImagePicker Delegate

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    NSURL * assetURL = [info objectForKey:UIImagePickerControllerReferenceURL];

    void(^completion)(void)  = ^(void){

        [[self assetLibrary] assetForURL:assetURL resultBlock:^(ALAsset *asset) {
            if (asset){
                [self launchEditorWithAsset:asset];
            }
        } failureBlock:^(NSError *error) {
            [[[UIAlertView alloc] initWithTitle:@"Error" message:@"Please enable access to your device's photos." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
        }];

        UIImage * editedImage = [info objectForKey:UIImagePickerControllerEditedImage];
        if(editedImage){
            [self launchPhotoEditorWithImage:editedImage highResolutionImage:editedImage];
        }

    };

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
        [self dismissViewControllerAnimated:YES completion:completion];
    }else{
        [self dismissPopoverWithCompletion:completion];
    }

}    

फिर त्रुटि गायब हो गई और ऐप काम करता है!


1

यह प्रयोग करके देखें

[self performSelector:@selector(presentCameraView) withObject:nil afterDelay:1.0f];

और कार्य करते हैं

-(void)presentCameraView{
    [self presentViewController:imagePicker animated:YES completion:nil];
}

बदलने के लिए। [self presentModalViewController:imagePicker animated:YES]; और कारण imagePickerएक वैश्विक चर के रूप में बनाते हैं ।


1

यह वही है जो मेरे लिए मेरे app, ymmv पर तय किया गया है

सबसे पहले यह एक iPhone - iPad ऐप है

appname-Info.plist में। समर्थित इंटरफ़ेस ओरिएंटेशन (iPad) में 4 ओरिएंटेशन दिखाई दिए।

समर्थित इंटरफ़ेस ओरिएंटेशन में 3 ओरिएंटेशन दिखाए गए। मैंने चौथा जोड़ा और ऐप चलाया, कोई डिबग आउटपुट नहीं।

उम्मीद है की यह मदद करेगा।


0

मैं सिर्फ एक ही मुद्दे का सामना करना पड़ा है। मेरे मामले में समस्या यह थी कि मेरे पास कुछ गैर-एआरसी कोड थे और मैंने इसे एआरसी में स्थानांतरित कर दिया है। जब मैंने माइग्रेशन किया, तो मैंने इसके लिए एक मजबूत संदर्भ नहीं रखा UIImagePickerControllerऔर यही दुर्घटना का कारण था।

आशा करता हूँ की ये काम करेगा :)


0

IOS 8 में भी यही मुद्दा था, लेकिन कैमरा एक्सेस सेटिंग्स के अंदर अक्षम था -> मेरे ऐप के लिए गोपनीयता । बस इसे सक्षम किया गया था, और यह काम कर रहा था।


0

मैंने लंबे समय तक समाधान खोजने की कोशिश की, और आश्चर्यजनक रूप से मैंने इसे अंत में पाया है और जब मैंने इसे खोजा तो यह बहुत मज़ेदार था।

यहाँ वही है जो आप अपने द्वारा चुनी गई छवि को पुनः प्राप्त करने के लिए करेंगे और काम करना फिर से शुरू करेंगे :)

-(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info
{
    UIImage* pickedImage = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
    [composeImageView setImage:pickedImage];
[picker dismissViewControllerAnimated:YES completion:nil];
 }

हां, समस्या को हल करने के लिए, आपको केवल पिकर को सामान्य रूप से खारिज करने की आवश्यकता है क्योंकि यह संदेश लगता है: "स्नैपशॉट को एक दृश्य में प्रस्तुत किया गया है, जिसके परिणामस्वरूप खाली स्नैपशॉट नहीं दिया गया है। सुनिश्चित करें कि स्नैपशॉट या स्नैपशॉट के पहले कम से कम एक बार आपके विचार का प्रतिपादन किया गया है। स्क्रीन अपडेट। " संवेदनशील होने से पिकर को रोकता है लेकिन आप इसे खारिज कर सकते हैं और छवि को सामान्य रूप से पुनः प्राप्त कर सकते हैं।


0

मेरे मामले में यह एक लेआउट परिवर्तन से संबंधित था: वीसी UIImagePickerViewControllerने जो स्टेटस बार प्रस्तुत किया है वह छिपा हुआ है, लेकिन UIImagePickerViewControllerनहीं।

तो, मैंने इसे हल कर दिया है कि स्थिति पट्टी को छुपाना UIImagePickerViewControllerजैसा कि इस उत्तर में दिखाया गया है ।


-1

सीधे आपके प्रश्न का उत्तर नहीं दे रहा है लेकिन आपने उल्लेख किया है कि आपके पास एक मेमोरी चेतावनी थी, आप एक संपत्ति में कच्ची छवि को संग्रहीत कर सकते हैं जिससे मेमोरी चेतावनी हो सकती है। इसका कारण यह है कि कच्ची छवि लगभग 30MB मेमोरी लेती है। मैंने आईओएस 6 पर ऐप की टेस्टिंग करते समय इसी तरह की मेमोरी वॉर्निंग देखी जो आईफोन 4 सीरीज पर थी। मुझे अभी भी यह चेतावनी मिली है जब उपकरणों को iOS7 में अपग्रेड किया गया था। IOS7 पर iPhone 5 श्रृंखला पर परीक्षण करते समय कोई मेमोरी चेतावनी नहीं है।


-5

बदलना

[self presentViewController:imagePicker animated:YES completion:nil];

सेवा

[self presentViewController:imagePicker animated:YES completion:NULL];

मेरे लिए मुद्दा तय किया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.