2013-04-30 8 views
5

मैं UIImagePicker में चुने गए वीडियो के बारे में कुछ डेटा प्राप्त करने का प्रयास कर रहा हूं।UIImagePickerControllerReferenceURL गुम है

तो जब यह UIImagePicker प्रतिनिधि विधि (नीचे) में आता है तो मुझे समझ में आता है कि मुझे जानकारी शब्दकोश से UIImagePickerControllerReferenceURL कुंजी का उपयोग करने की आवश्यकता है।

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

    NSLog(@"%@",url); 

    [library addAssetURL:[info objectForKey:UIImagePickerControllerReferenceURL] toAlbum:@"Compedia" withCompletionBlock:^(NSError *error) { 
     if (error!=nil) { 
      NSLog(@"Big error: %@", [error description]); 
     } 
    }]; 
} 

समस्या यह है कि यूआरएल नील के परिणामस्वरूप होता है। मैं जानकारी के विवरण मुद्रित और यह इस तरह दिखता है:

Printing description of info: 
{ 
    UIImagePickerControllerMediaType = "public.movie"; 
    UIImagePickerControllerMediaURL = "file://localhost/private/var/mobile/Applications/6630FBD3-1212-4ED0-BC3B-0C23AEEFB267/tmp/capture-T0x1f57e880.tmp.Ulfn5o/capturedvideo.MOV"; 
} 

के बाद मैं कुछ शोध मैं पता चला कि अगर मैं kUTTypeMovie साथ कैमरा सेट यह मेरे दोनों मीडिया और संदर्भ यूआरएल देना चाहिए किया है।

cameraUI = [[UIImagePickerController alloc] init]; 
cameraUI.sourceType = UIImagePickerControllerSourceTypeCamera; 
cameraUI.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeMovie, nil]; 
cameraUI.allowsEditing = YES; 
cameraUI.delegate = delegate; 
cameraUI.showsCameraControls = NO; 
cameraUI.cameraOverlayView = [self getCustomToolBar]; 

वहाँ कुछ मैं याद कर रहा हूँ है:

यह मैं कैसे मेरे कैमरे में परिभाषित किया गया है?

धन्यवाद,

उत्तर

11

लगभग इस पर पागल हो गया था। हर जगह जहां मैंने देखा कि हर कोई इस बात से आश्वस्त था कि UIImagePickerControllerReferenceURL हमेशा वहां था।

वैसे भी मुद्दा यह है कि यदि आपके प्रतिनिधि को UIImagePickerControllerReferenceURL की तुलना में कैमरे का उपयोग करके तस्वीर लेने के बाद बुलाया जा रहा है, तो ऑब्जेक्ट नहीं होगा क्योंकि छवि अभी तक कैमरे रोल में सहेजी नहीं गई है इसलिए इसलिए UIImagePickerControllerReferenceURL नहीं है । यह केवल तभी होता है जब प्रतिनिधि को कैमरा रोल से छवि चुनने के बाद बुलाया जाता है।

तो इसके आस-पास मेरा तरीका कैमरा रोल में सहेजने के लिए अलास्सेट लाइब्रेरी का उपयोग करना है, फिर यूआरएल को वापस पढ़ें।

मेरे समाधान यहाँ:

सबसे पहले आप अपने PickerController sourceType पता लगाने के लिए अगर यह कैमरा या photosLibrary/savedPhotosAlbum था देखना चाहते हैं। अगर यह कैमरा है तो हम एसेट लाइब्रेरी के लेखन का उपयोग करते हैं ImageToSavedPhotosAlbum: अभिविन्यास: समापनब्लॉक: कैमरा रोल पर छवि लिखने के लिए और हमें पूर्णता ब्लॉक में छवियों को यूआरएल वापस दे दें।

लेकिन अगर इसकी नहीं कैमरा तो इसका मतलब है कि है या तो photosLibrary या savedPhotosAlbum जो दोनों ही मामलों में [info objectForKey:UIImagePickerControllerReferenceURL] कोई मान्य url

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 

//dismiss the imagepicker view 
[self dismissViewControllerAnimated:YES completion:nil]; 


if([picker sourceType] == UIImagePickerControllerSourceTypeCamera) 
{ 
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
    ALAssetsLibrary *library = [Utils defaultAssetsLibrary]; 
    [library writeImageToSavedPhotosAlbum:image.CGImage orientation:(ALAssetOrientation)image.imageOrientation completionBlock:^(NSURL *assetURL, NSError *error) 
    { 
     //here is your URL : assetURL 
    }]; 
} 
else 
{ 
    //else this is valid : [info objectForKey:UIImagePickerControllerReferenceURL]]; 
} 

}

आशा है कि मदद करता है लौट आते हैं।

+0

मैं इस बयान पर एक त्रुटि हो रही है: ALAssetsLibrary * पुस्तकालय = [Utils defaultAssetsLibrary]; (अविकसित पहचानकर्ता उपयोग का उपयोग) मैं यहाँ क्या याद कर रहा हूँ? –

+0

@AzeemShaikh क्षमा करें कि मेरी गलती थी, मेरे पास एक यूटिल कॉल है जो एलासेट्स लाइब्रेरी का सिंगलटन बनाता है क्योंकि यह आपके ऐप में केवल इनमें से एक है। कुछ लेख हैं, स्टैक पोस्ट और ऐप्पल दस्तावेज ऑनलाइन यह समझाते हैं।तो आपको एलासेट्स लाइब्रेरी के एक नए उदाहरण के साथ [डिफ़ॉल्ट एसेट्स लाइब्रेरी का उपयोग] को प्रतिस्थापित करने की आवश्यकता है। हालांकि जैसे मैंने यह कहा कि आपके ऐप में इसका एक सिंगलटन है। – ssh88

संबंधित मुद्दे