2012-06-12 40 views
6

मैं उपयोगकर्ता पुस्तकालय से छवि का चयन करने की अनुमति देने के लिए UIImagePickerController का उपयोग कर रहा हूं। मैं फिर उस फ़ाइल का स्थान SQLite डेटाबेस में शुरू करना चाहता हूं, इसलिए मैं इसे बाद में देख सकता हूं।UIImagePickerControllerReferenceURL से UIImage लोड हो रहा है

मैं कुछ करने के बारे में कुछ कर रहा हूं और मैं इसे कम कर रहा हूं। मैं जानता हूँ कि मैं प्रतिनिधि विधि के अंदर फोन करके आइटम के ReferenceURL प्राप्त कर सकते हैं:

NSURL *picURL = [info objectForKey:@"UIImagePickerControllerReferenceURL"] 

यह मैं एक वैध NSURL वस्तु देता है और अगर मैं उत्पादन picURL.absoluteString मैं क्या करने के लिए कोई मान्य url हो गया लगता है कर सकते हैं फ़ाइल के संपत्ति-पुस्तकालय स्थान। हालांकि, अगर मैं इस यूआरएल के साथ एनएसडीटा ऑब्जेक्ट बनाने की कोशिश करता हूं तो मैं बदले में यूआईएममेज बना सकता हूं, कोड विफल हो जाता है क्योंकि एनएसडीटा शून्य लौटाता है। उदाहरण के लिए:

NSURL *picURL = [info objectForKey:@"UIImagePickerControllerReferenceURL"] 
    NSString *stringUrl = picURL.absoluteString; 
    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:stringUrl]]; 
    imgMain.image = [UIImage imageWithData:data] 

मुझे लगता है मैं यहाँ कुछ हद तक दोहराए जा रहा रहा हूँ, लेकिन बिंदु यूआरएल है कि मैं SQLite में स्टोर कर सकते हैं और उसके बाद की एक स्ट्रिंग प्रतिनिधित्व हड़पने के लिए है उपयोग (ताकि एक छवि बनाने के लिए स्ट्रिंग ने बाद में कहा उपरोक्त कोड उस विचार की ट्रेन का प्रतिनिधित्व करता है)।

मुझे एलास्सेट्स लाइब्रेरी का उपयोग करने के बारे में कुछ जानकारी मिली है, लेकिन इससे मुझे सभी प्रकार के फिट बैठे क्योंकि यह आईओएस 5 और एआरसी के साथ अच्छा नहीं लगता है। मैं त्रुटि संदेशों को प्राप्त करता हूं 'रिसीवर प्रकार अलास्सेट उदाहरण के लिए संदेश एक आगे की घोषणा है। मैं उस फ़ाइल पर गुण सेट कर सकता हूं जो एएलसी को अनदेखा करने के लिए अलास्सेट/अलास्सेट्स लाइब्रेरी का संदर्भ देता है जो बिल्ड त्रुटि को रोकता है लेकिन जैसे ही मैं कोड ब्लॉक छोड़ देता हूं, डेटा समाप्त हो जाता है। नीचे देखें:

NSURL *referenceURL = [info objectForKey:UIImagePickerControllerReferenceURL]; 
    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 
    __block UIImage *returnValue = nil; 
    [library assetForURL:referenceURL resultBlock:^(ALAsset *asset) { 
     returnValue = [UIImage imageWithCGImage:[[asset defaultRepresentation] fullResolutionImage]]; 
    } failureBlock:^(NSError *error) { 
     // error handling 
    }]; 
    [library release]; 

returnValue एक वैध छवि वापसी करता है लेकिन जैसे ही कोड बाहर निकालता है resultBlock डेटा की सामग्री के रूप में चले गए हैं (अर्थात returnValue फिर से अशक्त हो जाता है)।

तो मेरा सवाल यह है कि: मैं UIImagePickerControllerReferenceURL का उपयोग कैसे करूं और उसे एक स्ट्रिंग में परिवर्तित कर सकता हूं जिसे मैं एसक्लाइट में संग्रहीत कर सकता हूं और फिर बाद में एक वैध UIImage ऑब्जेक्ट बनाने के लिए कहा स्ट्रिंग का उपयोग कर सकता हूं?

+0

क्या आप thsi के साथ कहीं भी गए थे? –

उत्तर

9

ऐसा लगता है कि आप संपत्ति यूआरएल को सहेजने के लिए सही रास्ते पर हैं।

Save 
NSURL *picURL = [info objectForKey:@"UIImagePickerControllerReferenceURL"] 
NSString *stringUrl = picURL.absoluteString; 


Reload AssetURL 
NSURL asssetURL = [NSURL URLWithString:stringUrl] 

बाद में संपत्ति लोड करने के लिए, मैं इस धारणा पर आधारित हूं कि आप चाप का उपयोग नहीं कर रहे हैं। जो समझाएगा कि आप वापस क्यों आ रहे हैं वैल्यू शून्य है।

क्या आपने परिणाम में बरकरार रखने की कोशिश की है? उदाहरण के लिए:

NSURL *referenceURL = [NSURL URLWithString:savedAssetURLString] 
    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 
    __block UIImage *returnValue = nil; 
    [library assetForURL:referenceURL resultBlock:^(ALAsset *asset) { 
     returnValue = [[UIImage imageWithCGImage:[[asset defaultRepresentation] fullResolutionImage]] retain]; //Retain Added 
    } failureBlock:^(NSError *error) { 
     // error handling 
    }]; 
    [library release]; 
संबंधित मुद्दे