এনএসএলগের সাথে ব্যবহারের জন্য "টস্ট্রিং ()" এর অবজেক্টিভ-সি সমতুল্য কী?


170

এমন কোনও পদ্ধতি আছে যা আমি আমার কাস্টম ক্লাসগুলিতে ওভাররাইড করতে পারি যাতে কখন

      NSLog(@"%@", myObject) 

বলা হয়, এটি আমার অবজেক্টের ক্ষেত্রগুলি (বা আমি গুরুত্বপূর্ণ মনে করি) মুদ্রণ করবে? আমার ধারণা আমি জাভা-এর সমতুল্য উদ্দেশ্য সি-সন্ধান করছি toString()

উত্তর:


250

এটি descriptionউদাহরণস্বরূপ পদ্ধতি হিসাবে ঘোষণা করা হয়েছে:

- (NSString *)description

এখানে একটি উদাহরণ বাস্তবায়ন (গ্রাহাম্পার্কসকে ধন্যবাদ):

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

5
দ্রষ্টব্য আপনি যদি কোরেটাটা ব্যবহার করছেন তবে descriptionসম্পত্তিটি সংরক্ষিত আছে ... এবং দরকারী ডিবাগিং তথ্য সরবরাহ করবে! সেক্ষেত্রে আপনাকে নিজের অনন্য পদ্ধতির নামটি নিয়ে আসতে হবে।
নুচাচ

হয় debugDescriptionএছাড়াও সংরক্ষিত? যদিও আমি মনে করি DebugDescriptionএলএলডিবির মতো কোনও ডিবাগার ব্যবহার করার কথা।
ম্যাডডেইসনে

36

এই যোগ @implementationআপনার ফটো ক্লাসের:

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

24

আপনি এনএসবজেক্টের বর্ণনা পদ্ধতিটি ওভাররাইড করতে পারেন:

- (NSString *)description

লগিংয়ের বিষয়ে আমি উদ্দেশ্যটি-সি-তে আরও ভাল লগিংয়ের জন্য এই ব্লগ পোস্টটি সুপারিশ করি ।


4
এটি কি স্থির পদ্ধতি নয়? আমি এটি ক্লাসের চেয়ে বস্তুগুলিতে চালিত করতে চাই। উদাহরণস্বরূপ, যদি ক্ষেত্রের "নাম" এবং "লেখক" সহ আমার একটি "ফটো" শ্রেণি থাকে তবে আমি এনএসএলগকে fields ক্ষেত্রগুলি বস্তুটিতে নির্ধারিত হিসাবে মুদ্রণ করতে চাই।
জর্জ আর্মহোল্ড

2
হ্যাঁ - ভাল দাগযুক্ত - আমি ভুল কী টিপলাম। আমার উত্তরগুলি পড়ার সময় আমার আরও পরিষ্কার মনোযোগ দেওয়া উচিত। কৃতজ্ঞতার সাথে কারো নজর ছিল বল :-)
তেবট

13

আপনি দুটি ফাংশন ব্যবহার করতে পারেন are

- (NSString*)description

আপনি যখন নিজের অবজেক্ট, IE এর জন্য প্যারামিটার রাখবেন তখন এটি প্রদর্শিত হবে NSLog। অন্যান্য বিবরণ ফাংশনটি হ'ল:

- (NSString*)debugDescription

আপনি যখন po anInstanceOfYourClassডিবাগ কমান্ড উইন্ডোতে যাবেন তখন এটি ডাকা হবে । যদি আপনার ক্লাসে কোনও debugDescriptionফাংশন না থাকে তবে কেবলমাত্র descriptionডাকা হবে।

লক্ষ্য করুন বেস বর্গ NSObjectকরে আছে descriptionবাস্তবায়িত, কিন্তু এটা মোটামুটি বেয়ার হাড়: এটি শুধুমাত্র বস্তুর ঠিকানা প্রদর্শন করা হয়। এই কারণেই আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি যে descriptionকোনও শ্রেণিতে প্রয়োগ করতে চান যার মাধ্যমে আপনি তথ্য পেতে চান, বিশেষত যদি আপনি নিজের কোডটিতে descriptionপদ্ধতিটি ব্যবহার করেন । আপনি ব্যবহার করেন তাহলে descriptionআপনার কোডে, আমি সুপারিশ করছি বাস্তবায়ন debugDescriptionপাশাপাশি, এছাড়াও উপার্জন debugDescriptionআরো বাগাড়ম্বরপূর্ণ।


1

এটি উপলব্ধ ভয়েসেসকে আউটপুট দেবে:

    NSLog((@"speechVoices:%", [[AVSpeechSynthesisVoice speechVoices] description] ));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.