2009-07-09 7 views
164

वहाँ एक तरीका है कि मैं अपने कस्टम कक्षाओं में ओवरराइड कर सकते हैं ताकि जबNSLog के उपयोग के लिए "toString()" के लिए उद्देश्य-सी समतुल्य क्या है?

 NSLog(@"%@", myObject) 

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

उत्तर

240

यह description उदाहरण विधि है, घोषित:

- (NSString *)description 

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

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

नोट करें कि आप कोरडाटा का उपयोग कर रहे हैं, तो 'विवरण' संपत्ति [आरक्षित है] (http://stackoverflow.com/questions/4717519/why-cant-i-use- वर्णन-ए-ए-एट्रिब्यूट-नाम-के-कोर-डेटा-इकाई) ... और उपयोगी डीबगिंग जानकारी प्रदान करेगा! उस स्थिति में आपको अपने अद्वितीय विधि नाम के साथ आने की आवश्यकता होगी। – Nuthatch

+0

'डीबग डिस्क्रिप्शन' भी आरक्षित है? हालांकि मुझे लगता है कि 'डीबगडिस्क्रिप्शन' का उपयोग एलएलडीबी जैसे डीबगर द्वारा किया जाना चाहिए। – MaddTheSane

24

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

- (NSString *)description 

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

+4

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

+2

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

34

अपने फोटो वर्ग के @implementation को यह करें:

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

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

- (NSString*)description 

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

- (NSString*)debugDescription 

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

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

1

हो जाएगा ताकि उत्पादन उपलब्ध आवाज:

NSLog((@"speechVoices:%", [[AVSpeechSynthesisVoice speechVoices] description])); 
संबंधित मुद्दे