সেটঅবজেক্ট: ফরকি: এবং সেটভ্যালু: ফোরকি: এনএস পরিবর্তনযোগ্য অভিধানে কোথায় পার্থক্য?


153

ডকুমেন্টেশনটি দেখার সময়, আমি খুব কমই কোনও বড় পার্থক্য দেখতে পাচ্ছি। "মান" এবং "অবজেক্ট" উভয়ই টাইপ আইডির , সুতরাং যে কোনও বস্তু হতে পারে। কী একবারে স্ট্রিং হয় এবং অন্য ক্ষেত্রে একটি আইডি। তাদের মধ্যে একটি অবজেক্টটি ধরে রাখে বলে মনে হয় এবং অন্যটি তা রাখে না। আর কি? কোনটি কোন মামলার জন্য?


উত্তর:


163

setValue:forKey:NSKeyValueCoding প্রোটোকলের অংশ , যা অন্যান্য জিনিসের মধ্যে আপনাকে ইন্টারফেস বিল্ডারের পছন্দ থেকে অবজেক্টের বৈশিষ্ট্য অ্যাক্সেস করতে দেয়। setValue:forKey:ব্যতীত অন্য ক্লাসে প্রয়োগ করা হয় NSDictionary।

setObject:forKey:হয় NSMutableDictionary'sঅস্তিত্ব কারণ। এর স্বাক্ষরটি সেটভ্যালু: ফোরকি: এর সাথে বেশ সমান হতে পারে, তবে এটি আরও জেনেরিক (যেমন কোনও মূল ধরণের)। এটি কিছুটা কাকতালীয় বিষয় যে স্বাক্ষরগুলি সাদৃশ্যপূর্ণ।

বিভ্রান্তিটি কী যুক্ত করে তা হ'ল এনএসএমটেবলড অভিধানের বাস্তবায়ন বেশিরভাগ ক্ষেত্রেই setValue:forKey:সমান setObject:forKey:। অন্যান্য ক্লাসে setValue:forKey:সদস্য ভেরিয়েবল পরিবর্তন করে। ইন NSMutableDictionary, এটি অভিধানের এন্ট্রিগুলিকে পরিবর্তন করে, আপনি যদি '@' অক্ষর দিয়ে কী উপসর্গ না করেন - তবে এই ক্ষেত্রে সদস্যের ভেরিয়েবলগুলি সংশোধন করে।

সুতরাং, সংক্ষেপে, setObject:forKey:যখন আপনার অভিধান কী এবং মানগুলি নিয়ে কাজ করার দরকার হবে এবং setValue:forKey:বিরল ক্ষেত্রে যেখানে আপনাকে কেভিপি মোকাবেলা করতে হবে তা ব্যবহার করুন ।

সম্পাদনা করুন: এবং ওহ, দেখে মনে হচ্ছে এটি আগে জিজ্ঞাসা করা হয়েছে এবং উত্তর দেওয়া হয়েছে: অবজেক্টফো এবং মান ফোরকির মধ্যে পার্থক্য?


প্রশ্নটি একরকম নয়। এটি getter পদ্ধতি সম্পর্কে, যেখানে এই প্রশ্নটি সেটার পদ্ধতি সম্পর্কে
— ব্যবহারকারী 102008

1
"এনএস পরিবর্তনযোগ্য অভিধানে আপনার অর্থ কী, যদি আপনি '@' অক্ষর দিয়ে কী উপসর্গ না করেন - তবে এটি ক্ষেত্রে সদস্য ভেরিয়েবলগুলিকে সংশোধন করে না হলে" "অভিধানের এন্ট্রিগুলিকে পরিবর্তন করে।" কি সদস্য ভেরিয়েবল? এছাড়াও আপনি স্ট্যাকওভারফ্লো / প্রশ্নগুলি / 75755917 এ মন্তব্য করতে পারেন ? ধন্যবাদ।
— পিটার btibraný

কেবল সম্পূর্ণতার জন্য, setObject: forKey আপত্তি করবে (ব্যতিক্রম) যদি শূন্য থাকে। উইন্ডোজ সেট করবে: ফরকি কী একই রকম আচরণ করবে, বা কী ব্যবহারের জন্য নির্ধারণ করার সময় এটি অভিধান থেকে বিদ্যমান অবজেক্টটি সরিয়ে ফেলবে?
— মোটি শ্নের

দুর্দান্ত উত্তর। সত্যিই। সম্পূর্ণতার জন্য যদিও, এটি উল্লেখ করা ভাল লাগবে যে (কমপক্ষে এনএসএমটেবলড অভিধানে) সেটভ্যালু: ফোরকি: নীল মান সহ্য করে, এবং এন্ট্রি সরিয়ে দেয় - যখন সেটঅবজেক্ট: ফরকি: নীল মান হস্ত হলে ব্যতিক্রম এবং ক্রাশ নিক্ষেপ করবে।
— মোটি শ্নের

83

আরেকটি পার্থক্য হ'ল আপনি যদি কোনও শূন্য মান দেন setValue:forKey:, এটি অভিধান থেকে কীটি উপস্থিত থাকলে সরিয়ে দেয়, অন্যথায় কিছুই করেন না। আপনি যদি কোনও শূন্য মূল্য দেন তবে setObject:forKey:এটি ব্যতিক্রম করে।


10
এটি জানতে অত্যন্ত দরকারী। এটি সম্পাদন করার জন্য আমি অন্যথায় এনএসএমটেবলড অভিধানে আমার নিজস্ব বিভাগ লিখেছিলাম! ধন্যবাদ
— আরমান

2
আর একটি পার্থক্য হ'ল অবজেক্টিভ-সি সাবস্ক্রিপশনের সাথে, dic[key] = value;মানটি থাকলে কীটি সরানোর জন্য আপনি লিখতে পারেন nil। সাবস্ক্রিপশন সাধারণত setValue:forKey:এটি সম্পাদন করার চেয়ে ভাল পদ্ধতির ।
— সিউর

9

-setValue:forKey:-setObject:forKey:মানটি না থাকলে কেবল প্রাপককে প্রেরণ করুন , সেক্ষেত্রে nilপ্রেরণ করুন -removeObjectForKey।

মরা সহজ।


ওহ, আপনি ঠিক বলেছেন। এর জন্যে দুঃখিত. এটি এখানে নথিভুক্ত করা হয়েছে: developer.apple.com/references/foundation/nsmutabled
— এডি

4

anObject - কী এর মান। বস্তুটি যুক্ত হওয়ার পূর্বে একটি বার্তা প্রাপ্ত করে NSDictionary। এই মানটি শূন্য করা উচিত নয়।

aKey - মান জন্য কী। কীটি অনুলিপি করা হয়েছে (ব্যবহার করে copyWithZone:; কীগুলি NSCopyingপ্রোটোকলের সাথে সঙ্গতিপূর্ণ হবে )। কীটি অবশ্যই শূন্য হবে না।

মান - কী এর মান।

কী - মানের জন্য কী। নোট করুন যে কী-মান কোডিং ব্যবহার করার সময়, কীটি অবশ্যই একটি স্ট্রিং (দেখুন "কী-মান কোডিং মৌলিক বিষয়গুলি")।


Thanks for giving the atual reason why setObject:forKey: raises an exception. @breakfreehg
— simbesi.com
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.