এনএসএলগ সি স্ট্রাক্টস (সিজিআরেক্ট বা সিজিপিয়েন্টের মতো) এর পক্ষে কি সম্ভব?


413

আমি সেগুলি সমন্বিত প্রতিটি সম্পত্তি স্পষ্টভাবে টাইপ না করে সি স্ট্রাকচারগুলি ডিবাগ করতে সক্ষম হতে চাই।

অর্থাত আমি এই জাতীয় কিছু করতে সক্ষম হতে চাই:

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

অবশ্যই '% @' কাজ করবে না, সুতরাং প্রশ্ন hence


2
এনএসএলগ (@ "% @", সিজিআরেক্টক্রিটডেটরিজরিয়ানেশন (রেকট));
অভিষেক বেদি

ভিটিপিজি_কমনের লাইব্রেরি থেকে LOG_EXPR চেষ্টা করুন: vgable.com/blog/tag/log_expr
শিখুন কোকোস

উত্তর:


806

আপনি এটি চেষ্টা করতে পারেন:

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

ইউআইকিট দ্বারা সরবরাহিত বিভিন্ন ফাংশন রয়েছে যা বিভিন্ন সিজি স্ট্রাক্টকে NSStringএস-এ রূপান্তর করে । এটি কাজ না করার কারণটি হ'ল %@কোনও বস্তুকে বোঝায়। এ CGPointহ'ল সি স্ট্রাক্ট (এবং তাই CGRectএস এবং CGSizeএস)।


7
ওএস এক্সে অ্যাপকিটের সাথে আপনাকে একটিতে রূপান্তর করতে হবে NSPointএবং তারপরে কল করতে হবে NSStringFromPoint। উদাহরণস্বরূপ:NSStringFromPoint(NSPointFromCGPoint(point))
অ্যালেক্স

19
এনএসএলগ (@ "% @", সিজিআরেক্টক্রিটডেটরিজরিয়ানেশন (রেকট));
অভিষেক বেদি

ইউআই, এমকে, সিএল উপসর্গের মতো যা সকলের অর্থ রয়েছে এবং একটি সম্পর্কিত .h ফাইল আমদানি করা দরকার: ইউআইকিট, ম্যাপকিট, কোরলোকেশন; সিজি উপসর্গটির অর্থ কি আমার কিছু আমদানি করা উচিত? না হলে কি কেবল নামকরণের কনভেনশন হয় ?!
মধু

231

এখানে কয়েকটি ফাংশন রয়েছে:

NSStringFromCGPoint  
NSStringFromCGSize  
NSStringFromCGRect  
NSStringFromCGAffineTransform  
NSStringFromUIEdgeInsets

একটি উদাহরণ:

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

4
এগুলি হ'ল: "সমস্ত আইওএস বিকাশের একক জিনিস যা সবচেয়ে দরকারী তবে স্বল্প পরিচিত" !! হি
ফ্যাটি

7
দ্রষ্টব্য: কোকো (ওএস এক্স) বিকাশের জন্য, এই ফাংশনগুলির নামে "সিজি" নেই।
পিটারফ্লিন


13

এনএসআরেক্ট সম্পর্কে আমাকে সাহায্য করতে আমি নিম্নলিখিত ম্যাক্রোটি ব্যবহার করি:

#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)

আপনি সিজিপয়েন্টের জন্য অনুরূপ কিছু করতে পারেন:

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

এটি নিম্নলিখিত হিসাবে ব্যবহার করে:

LogCGPoint(cgPoint);

নিম্নলিখিত উত্পাদন করতে হবে:

cgPoint: (100, 200)

6
কেন কেবল ইউআইকিট স্ট্রিং রূপান্তর ফাংশনগুলিতে বিল্ট ব্যবহার করবেন না ?
ma11hew28

আমি এখন করি. এগুলি অ্যালেক্স এবং স্টিভ তাদের উত্তরগুলিতে পোস্ট করেছে যেগুলি খুব কার্যকরী।
জেমস

1
উত্তরটি সম্পাদনা করা এবং "কেবলমাত্র historicতিহাসিক আগ্রহের জন্য ..." শীর্ষে একটি নোট যুক্ত করা কি উপযুক্ত ? আমি সর্বদা এটি করি, উদাহরণস্বরূপ স্ট্যাকওভারফ্লো. com/ qtions/ 402/ iphone- app- in- landcreen- mode/… স্ট্যাকওভারফ্লো / প্রশ্ন / 5৯৪৪৪7979/২ স্ট্যাকওভারফ্লো / প্রশ্নগুলি / 12২১২২২৮৮/২ ( "এটি লক্ষণীয় যে আগের দশকের এই পোস্টটি সত্যই এখন কেবল historic
তিহাসিক

1
ইউআইকিট রূপান্তর ফাংশনের অস্তিত্ব থাকা সত্ত্বেও এই উত্তরটি এখনও কার্যকর because
গ্রেগ বেল

10

আপনি NSValueএই জন্য ব্যবহার করতে পারেন । একটি এনএসভ্যালু অবজেক্টটি একটি একক সি বা অবজেক্টিভ-সি ডেটা আইটেমের জন্য একটি সাধারণ ধারক। এটি কোনও স্কেলারের ধরণের যেমন ইন্ট, ফ্লোট এবং চর হিসাবে পাশাপাশি পয়েন্টার, কাঠামো এবং অবজেক্ট আইডি ধরে রাখতে পারে।

উদাহরণ:

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

আউটপুট: NSPoint: {10, 30}

আশা করি এটি আপনাকে সহায়তা করবে।


ধন্যবাদ @ নিশান্ট - একটি সিএমটাইমরেঞ্জের সামগ্রীর আউটপুট দেওয়ার প্রয়োজন এবং এটি কৌশলটি করেছে।
এনএসএসস্ট্রিংফ্রমের

5

স্ট্যাক ওভারফ্লোয়ের ভাঙা আরএসএস যেহেতু আমার জন্য এই প্রশ্নটি পুনরুত্থিত করেছে, তাই এখানে আমার প্রায়-সাধারণ সমাধান: জেভালিউটোস্ট্রিং

এটি আপনাকে লিখতে JA_DUMP(cgPoint)এবং cgPoint = {0, 0}লগ করতে দেয় ।


আমি এটি করেছি এবং আমি সংকলন ত্রুটি পেয়েছি। কখনও কখনও সম্পত্তি এক্সপ্রেশন ঠিকানা প্রয়োজন বা কিছু
ব্যবহারকারীর 4951

@ জিম থিও: ম্যাক্রোটি এমনভাবে সেট আপ করা হয়েছে যাতে পরিদর্শন করা অবজেক্টটি অবশ্যই মূল্যবান হতে পারে। (কেন আমি মনে করতে পারি না; অন্যথায় সি স্ট্রিংগুলি সঠিকভাবে পরিচালনা করতে সক্ষম না হওয়া সম্পর্কিত কিছু)) সংক্ষেপে, আপনার সম্পত্তিটিকে একটি অস্থায়ী পরিবর্তনশীলকে বরাদ্দ করুন, তারপরে JA_DUMP কল করুন।
জেনস অ্যাটন

5

হ্যাঁ, আপনি বেলো কয়েকটি ফাংশন ব্যবহার করতে পারেন যেমন: প্রথমে আপনাকে সিজিপিয়েন্ট স্ট্রাক্টটিকে স্ট্রিংয়ে রূপান্তর করতে হবে, উদাহরণটি দেখুন

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

উদাহরণ স্বরূপ:

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

এটার মত...


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.