NSLog के साथ उपयोग के लिए "-String ()" के लिए ऑब्जेक्टिव-सी क्या है?


170

क्या कोई ऐसा तरीका है जिसे मैं अपनी कस्टम कक्षाओं में ओवरराइड कर सकता हूं ताकि जब

      NSLog(@"%@", myObject) 

कहा जाता है, यह मेरी वस्तु के क्षेत्र (या जो कुछ भी मुझे महत्वपूर्ण लगता है) को प्रिंट करेगा। मुझे लगता है कि मैं जावा के ऑब्जेक्टिव-सी के बराबर देख रहा हूं toString()

जवाबों:


250

यह descriptionउदाहरण विधि है, जिसे निम्न रूप में घोषित किया गया है:

- (NSString *)description

यहां एक उदाहरण कार्यान्वयन (ग्रेहापार्क के लिए धन्यवाद) है:

- (NSString *)description {
   return [NSString stringWithFormat: @"Photo: Name=%@ Author=%@", name, author];
}

5
ध्यान दें कि यदि आप CoreData का उपयोग कर रहे हैं, तो descriptionसंपत्ति आरक्षित है ... और उपयोगी डिबगिंग जानकारी प्रदान करेगा! उस मामले में आपको अपने स्वयं के अनूठे तरीके के नाम के साथ आने की आवश्यकता होगी।
नटचट

है debugDescriptionभी सुरक्षित? हालांकि मुझे लगता DebugDescriptionहै कि इसका उपयोग एलएलडीबी जैसे डिबगर द्वारा किया जाना चाहिए।
1

36

इसे @implementationअपने फोटो वर्ग में जोड़ें:

- (NSString *)description {
   return [NSString stringWithFormat:@"Photo: Name=%@ Author=%@",name,author];
}

24

आप NSObject की विवरण विधि को ओवरराइड कर सकते हैं:

- (NSString *)description

लॉगिंग के विषय पर मैं उद्देश्य-सी में बेहतर लॉगिंग के लिए इस ब्लॉग पोस्ट की सलाह देता हूं ।


4
क्या यह एक स्थिर विधि नहीं है? मैं कक्षा के बजाय वस्तुओं पर काम करना चाहूंगा। उदाहरण के लिए, यदि मेरे पास "नाम" और "लेखक" के साथ "फोटो" वर्ग है, तो मैं उन क्षेत्रों को प्रिंट करने के लिए NSLog चाहूंगा, जैसा कि वे ऑब्जेक्ट में असाइन किए गए हैं।
जॉर्ज आर्महोल्ड

2
हाँ - अच्छी तरह से देखा - मैंने गलत कुंजी दबाया। मुझे स्पष्ट रूप से अधिक ध्यान देना चाहिए जब प्रमाण मेरे उत्तरों को पढ़ रहे हों। शुक्र है कि किसी की गेंद पर उनकी नजर थी :-)
टीबटूट

13

दो कार्य हैं जिनका आप उपयोग कर सकते हैं।

- (NSString*)description

जब आप अपनी वस्तु को IE के लिए एक पैरामीटर के रूप में प्रदर्शित करते हैं, तो यह प्रदर्शित किया जाएगा NSLog। अन्य विवरण समारोह है:

- (NSString*)debugDescription

जब आप po anInstanceOfYourClassडीबग कमांड विंडो में करते हैं तो इसे कॉल किया जाएगा । यदि आपकी कक्षा में कोई debugDescriptionफ़ंक्शन नहीं है , तो बस descriptionबुलाया जाएगा।

ध्यान दें कि बेस क्लास NSObjectने descriptionलागू किया है, लेकिन यह काफी नंगे-हड्डियां हैं: यह केवल ऑब्जेक्ट का पता प्रदर्शित करता है। यही कारण है कि मैं आपको descriptionकिसी भी वर्ग में लागू करने की सलाह देता हूं जिससे आप जानकारी प्राप्त करना चाहते हैं, खासकर यदि आप descriptionअपने कोड में विधि का उपयोग करते हैं । यदि आप descriptionअपने कोड में उपयोग करते हैं , तो मेरा सुझाव है कि आप इसे भी लागू करें debugDescription, और भी debugDescriptionअधिक क्रिया करना।


1

यह उपलब्ध आवाजों को आउटपुट करेगा:

    NSLog((@"speechVoices:%", [[AVSpeechSynthesisVoice speechVoices] description] ));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.