क्या यह NSLog C संरचना (CGRect या CGPoint की तरह) संभव है?


413

मैं स्पष्ट रूप से हर संपत्ति को टाइप करने के लिए सी संरचनाओं को डीबग करने में सक्षम होना चाहता हूं जिसमें वे शामिल हैं।

यानी मैं ऐसा कुछ करने में सक्षम होना चाहता हूं:

CGPoint cgPoint = CGPointMake(0,0);
NSLog(@"%@",cgPoint);

जाहिर है '% @' काम नहीं करेगा, इसलिए सवाल।


2
NSLog (@ "% @", CGRectCreateDictionaryRepresentation (rect));
अभिषेक बेदी

VTPG_Common लाइब्रेरी से LOG_EXPR आज़माएं: vgable.com/blog/tag/log_expr
LearnCocos2D

जवाबों:


806

आप यह कोशिश कर सकते हैं:

NSLog(@"%@", NSStringFromCGPoint(cgPoint));

UIKit द्वारा प्रदान किए जाने वाले कई कार्य हैं जो विभिन्न CG संरचनाओं को NSStrings में परिवर्तित करते हैं । कारण यह काम नहीं करता है क्योंकि %@एक वस्तु का प्रतीक है। A CGPointएक C संरचना है (और इसलिए CGRects और CGSizes हैं)।


7
OS X पर AppKit के साथ आपको NSPointकॉल करने के लिए कन्वर्ट करने की आवश्यकता होगी NSStringFromPoint। उदाहरण के लिए:NSStringFromPoint(NSPointFromCGPoint(point))
एलेक्स

19
NSLog (@ "% @", CGRectCreateDictionaryRepresentation (rect));
अभिषेक बेदी

यूआई, एमके, सीएल उपसर्गों के समान है, जबकि सभी के लिए इसके अर्थ हैं और एक संबंधित .h फ़ाइल आयात करने की आवश्यकता है: जैसे: UIKit, MapKit, CoreLocation; क्या CG उपसर्ग का मतलब है कि मुझे कुछ भी आयात करना चाहिए? यदि नहीं तो सिर्फ एक नामकरण सम्मेलन है ?!
हनी

231

कुछ कार्य हैं जैसे:

NSStringFromCGPoint  
NSStringFromCGSize  
NSStringFromCGRect  
NSStringFromCGAffineTransform  
NSStringFromUIEdgeInsets

एक उदाहरण:

NSLog(@"rect1: %@", NSStringFromCGRect(rect1));

4
ये हैं: "iOS के सभी विकास में एक चीज जो सबसे उपयोगी है लेकिन कम से कम ज्ञात है" !! हेह
फेटी

7
नोट: कोको (OS X) विकास के लिए, इन कार्यों के नाम में "CG" नहीं है।
पेट्रेलिन 28


13

NSRect के साथ मेरी मदद करने के लिए मैं निम्नलिखित मैक्रो का उपयोग करता हूं:

#define LogRect(RECT) NSLog(@"%s: (%0.0f, %0.0f) %0.0f x %0.0f",
    #RECT, RECT.origin.x, RECT.origin.y, RECT.size.width, RECT.size.height)

आप CGPoint के लिए कुछ ऐसा ही कर सकते हैं:

@define LogCGPoint(POINT) NSLog(@"%s: (%0.0f, %0.0f)",
    #POINT POINT.x, POINT.y);

इसका उपयोग इस प्रकार है:

LogCGPoint(cgPoint);

निम्नलिखित उत्पादन करेंगे:

cgPoint: (100, 200)

6
सिर्फ यूआईआईटीटी स्ट्रिंग कन्वर्शन फंक्शन्स में निर्मित का उपयोग क्यों नहीं किया जाता है ?
1711 में ma11hew28

मैं अब करुँ। वे बाहरी रूप से फ़ंक्शंस हैं जो एलेक्स और स्टीव ने अपने उत्तरों में पोस्ट किए हैं।
ई। जेज

1
क्या यह उत्तर को संपादित करने और "केवल ऐतिहासिक हित के लिए ..." शीर्ष पर एक नोट जोड़ने के लायक होगा । मैं हमेशा ऐसा ही करता हूं, उदाहरण के लिए stackoverflow.com/questions/402/iphone-app-in-landscape-mode/… stackoverflow.com/questions/5492479/… stackoverflow.com/questions/4212628-… ( "यह ध्यान देने योग्य है।" पिछले दशक से यह पोस्ट, वास्तव में अब केवल ऐतिहासिक हित की है। " ) आदि
फेटी

1
यह उत्तर यूआईआईटी रूपांतरण कार्यों के अस्तित्व के बावजूद अभी भी उपयोगी है, क्योंकि अन्य रूपरेखाओं में अन्य संरचनाएं हैं, जिनमें एनएसएसट्रिंगफ्रॉम हेल्पर्स (जैसे। एमकेओओर्डिनेटरीजियन) नहीं हैं।
ग्रेग बेल

10

आप इसके लिए उपयोग कर सकते हैं NSValue। एक NSValue ऑब्जेक्ट सिंगल C या ऑब्जेक्टिव-सी डेटा आइटम के लिए एक साधारण कंटेनर है। यह किसी भी अदिश प्रकार को पकड़ सकता है जैसे कि इंट, फ्लोट और चार, साथ ही पॉइंटर्स, स्ट्रक्चर और ऑब्जेक्ट आईडी।

उदाहरण:

  CGPoint cgPoint = CGPointMake(10,30);
    NSLog(@"%@",[NSValue valueWithCGPoint:cgPoint]);

OUTPUT: NSPoint: {10, 30}

आशा है कि यह आपकी मदद करता है।


धन्यवाद @ निशांत - एक CMTimeRange के कंटेंट को आउटपुट करने की जरूरत है और इसने यह काम किया। NSStringFrom की तुलना में कहीं अधिक संभावनाएं ...
amergin

5

चूंकि स्टैक ओवरफ्लो के टूटे हुए आरएसएस ने मेरे लिए इस प्रश्न को फिर से जीवित किया, यहाँ मेरा लगभग सामान्य समाधान है: JAValueTString

यह आपको लिखने JA_DUMP(cgPoint)और cgPoint = {0, 0}लॉग इन करने देता है ।


मैंने ऐसा किया और मुझे संकलन में त्रुटि हुई। कभी-कभी संपत्ति अभिव्यक्ति की आवश्यकता या कुछ का पता
user4951

@ जैम थियो: मैक्रो को इस तरह से सेट किया जाता है कि निरीक्षण की जा रही वस्तु को एक अंतराल होना चाहिए। (मुझे याद नहीं क्यों, कुछ के बारे में अन्यथा ठीक से सी स्ट्रिंग को संभालने में सक्षम नहीं किया जा सकता है।) संक्षेप में, एक अस्थायी चर के लिए अपनी संपत्ति असाइन करें, फिर उस पर JA_DUMP को कॉल करें।
जेन्स आयटन

5

हां, आप कुछ कार्यों का उपयोग कर सकते हैं जैसे: सबसे पहले आपको CGPoint संरचना को स्ट्रिंग में बदलना होगा, उदाहरण देखें

1) NSStringFromCGPoint,  
2) NSStringFromCGSize,  
3) NSStringFromCGRect,  
4) NSStringFromCGAffineTransform,  
5) NSStringFromUIEdgeInsets,

उदाहरण के लिए:

1) NSLog(@"NSStringFromCGPoint = %@", NSStringFromCGRect(cgPointValue));

ऐशे ही...


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.