2010-12-15 11 views
5

मैं AppKit और NSDocument के साथ खेल रहा हूँ और मैं यह क्यों काम नहीं कर रहा ?:NSURL → NSImage → NSImageView

मैं सिर्फ यह लिखा पता नहीं है और छवि नहीं के बराबर नहीं है, लेकिन कभी नहीं किसी भी छवि लोड करता है, इसका आकार है हमेशा शून्य क्या यह सही तरीका है जिसे मुझे अपने दस्तावेज़ में फ़ाइलों को पढ़ने के लिए लागू करना है? मुझे पथ की आवश्यकता है, न कि डेटा (एनएसडीएटा) क्योंकि मैं अन्य फाइलों को पढ़ने के लिए अन्य लाइब्रेरी का उपयोग करने की योजना बना रहा हूं।

अब मैं पीएनजी, जेपीजी पढ़ने की कोशिश कर रहा हूं, कोई भी काम नहीं करता है। ; (

- (BOOL) readFromURL:(NSURL *)url ofType:(NSString *)typeName error:(NSError **)outError{ 

    NSImage *image = nil; 
    image = [[NSImage alloc] initWithContentsOfURL:url]; 

    [imageView setImage:image]; 
    [image release]; 

    if (outError != NULL) { 
     *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL]; 
    } 
    return YES; 
} 

अग्रिम धन्यवाद

+2

+1 के उपयोग के लिए +1; – Jakub

उत्तर

6

imageView एक निब फ़ाइल से लोड किया जा रहा है, तो यह निर्धारित किया गया है नहीं होगा जब readFromURL: ofType: त्रुटि: कहा जाता है। इसके बजाए, आपको छवि को लोड करना चाहिए और इसे एक आवृत्ति चर में संग्रहीत करना चाहिए, फिर इसे विंडो में जोड़ें विंडो में नियंत्रक DidLoadNib: विधि। साथ ही, आप हर बार एक त्रुटि लौट रहे हैं, जबकि आपको केवल एक त्रुटि वापस करनी चाहिए कुछ गलत हो जाता है।

- (void)windowControllerDidLoadNib:(NSWindowController *)windowController { 
    [imageView setImage:image]; 
    [image release]; 
    image = nil; 
} 
- (BOOL)readFromURL:(NSURL *)url ofType:(NSString *)typeName error:(NSError **)outError { 
    image = [[NSImage alloc] initWithContentsOfURL:url]; 
    if(!image) { 
     if(outError) *outError = [NSError errorWithDomain:NSOSStatusErrorDomain code:unimpErr userInfo:NULL]; 
     return NO; 
    } 
    return YES; 
} 

बस सुनिश्चित करें कि आप एक एनएसआईमेज * छवि जोड़ते हैं; आपके हेडर फ़ाइल में आवृत्ति चर।

+1

ग्रेट उत्तर। "UnimpErr" प्लेसहोल्डर त्रुटि "अनुक्रमित त्रुटि" के बराबर होती है, जो कि वास्तव में डेवलपर ने अभी तक उस विधि को बाहर नहीं निकाला है। विफल होने वाली छवि को लोड करने के मामले में, संभवतः यह कोको के एनएस फ़ाइलकॉर्टर कोड (क्षमा करें, सटीक enum नाम के बारे में सुनिश्चित नहीं) का उपयोग करने के लिए अधिक समझदारी होगी। – NSGod

+0

धन्यवाद यह काम किया;) – nacho4d

6

यह इस तरह से कार्य करें:।

NSImage *image = [[NSImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url]]]; 
+1

मै मैक ओएस, ऐपकिट पर हूं। इसलिए कोई UIImage मैट नहीं है। – nacho4d

+0

संपादित और परीक्षण किया गया। इस तरह काम करेगा। –

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