2012-04-04 6 views
7

विशेष रूप से, मैं छवि पथ खोजने की कोशिश कर रहा हूं। यह प्राप्त करने में सक्षम होने के लिए एक बहुत उपयोगी चीज होगी, और जहां तक ​​मुझे पता चला है कि कोई भी कैसे जानता है। मैंने कुंजी के लिए जेनरेट की गई निब फ़ाइल को देखा है, और मैं वहां पर छवि यूआरएल (test.jpg) देख पा रहा हूं लेकिन इसे पाने के लिए कुंजी नहीं मिल पा रहा हूं। कुंजी "UIImage" वास्तविक पहले से निर्मित छवि (initWithCGImageStored:(CGImageRef)cgImage scale:(CGFloat)scale orientation:(UIImageOrientation)orientation के माध्यम से निर्मित और एक रहस्यमय UIKit फ़ंक्शन कॉल GetImageAtPath द्वारा निर्दिष्ट किया गया है जो उल्लिखित इनिट कॉल को कॉल करता है), इसलिए यह सहायक नहीं है।initWithCoder में: एनएससीओडर (एक UINibDecoder) में कुंजी क्या हैं? (UIImageView के लिए)

मैंने NSIIeyedArchiver के साथ डिस्क पर UIImageView लिखने का भी प्रयास किया है और इनमें से कोई भी मान सही नहीं लगता है, न ही test.jpg मान मौजूद है।

यदि कोई इसे समझ नहीं सकता है - किसी को पता है कि बाइनरी फ़ाइल में पाठ के रूप में कैसे पढ़ा जाए? मैं सिर्फ nib के माध्यम से पढ़ सकता हूं और यूआरएल को पार्स कर सकता हूं, जो कि कुछ भी नहीं है, लेकिन एनएसएसटींग के निर्माता इस प्रारूप के बावजूद असफल हो जाते हैं कि मैं किस प्रारूप का प्रयास करता हूं।

उत्तर

5

क्या आपने NSKeyedUnarchiver पर एक श्रेणी को लागू करने और उस तरह की चाबियाँ पकड़ने की कोशिश की है? त्वरित कार्यान्वयन और जांच और आप पाएंगे कि कुंजी "यूआईरसोर्सनाम" है। हालांकि ध्यान रखें कि कुंजीयुक्त अनैच्छिक आपको वर्तमान डिकोडिंग दायरे में केवल कुंजी के लिए ऑब्जेक्ट देता है। इसका मतलब है कि आप रूट से इस कुंजी के लिए क्वेरी नहीं कर सकते हैं और आपको ऑब्जेक्ट पदानुक्रम में गहरी खुदाई करनी है।

नीचे एक कोड है जो किसी भी लिंक किए गए संसाधनों को लॉग करता है। यह आप पर निर्भर करता है कि आप इसका उपयोग कैसे करते हैं। जब यूआईएममेज डीकोड किया जाता है तो यह भी लॉग होता है। यदि आप चाहें तो यहां अपनी खुद की कक्षा वापस कर सकते हैं।

@interface NSKeyedUnarchiver (MyKeyedUnarchiver) 
@end 

@implementation NSKeyedUnarchiver (MyKeyedUnarchiver) 

- (id) mydecodeObjectForKey:(NSString *)key 
{ 
    id obj = [self mydecodeObjectForKey:key]; 
    if ([key isEqualToString:@"UIResourceName"]) 
     NSLog(@"The linked resource name is: %@", obj); 
    return obj; 
} 

- (Class) myclassForClassName:(NSString *)codedName 
{ 
    if ([codedName isEqualToString:@"UIImageNibPlaceholder"]) 
     NSLog(@"Decoding a UIImage"); 
    return [self myclassForClassName:codedName]; 
} 

+ (void) load 
{ 
    SEL origM = @selector(decodeObjectForKey:); 
    SEL newM = @selector(mydecodeObjectForKey:); 
    method_exchangeImplementations(class_getInstanceMethod(self, origM), class_getInstanceMethod(self, newM)); 

    origM = @selector(classForClassName:); 
    newM = @selector(myclassForClassName:); 
    method_exchangeImplementations(class_getInstanceMethod(self, origM), class_getInstanceMethod(self, newM)); 
} 

@end 

उम्मीद है कि इससे मदद मिलती है।

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