এনএসউসারডেফল্টস সরানঅজেক্টফোরকি কী বনাম সেটঅবজেক্ট: শূন্য


116

নিম্নলিখিত দুটি লাইন সমতুল্য?

1। [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"example key"]

2। [[NSUserDefaults standardUserDefaults] setObject:nil forKey:@"example key"]


1
হ্যাঁ, প্রথমটি বাদে আপনার অভিপ্রায়টি আরও স্পষ্ট করে তোলে।
বলপয়েন্টবেন

উত্তর:


14

সুইফট 3.0

আমি এটি পরীক্ষা করে নিচের উত্তরটি আর হয় না। যখন nilফলাফলটিতে সেট করা হয় তখন এনএসসিএফডেটা সংরক্ষণ করা হয়। সম্ভবত একটি এনএসনুল অবজেক্ট রেফারেন্স, তবে আমি ইতিবাচক নই।

কী ব্যবহারের জন্য একটি মান সম্পূর্ণরূপে অপসারণ করতে UserDefaults.standard.removeObject(forKey: "YourDefault")

আমি নিম্নলিখিত কোডটি দিয়ে পরীক্ষা করেছি:

UserDefaults.standard.set(["a", "b", "c"], forKey: "MyDefaults")
print("Test A: My saved defaults \(UserDefaults.standard.object(forKey: "MyDefaults"))")

UserDefaults.standard.set(nil, forKey: "MyDefaults")
print("Test B: My defaults set to nil \(UserDefaults.standard.object(forKey: "MyDefaults"))")

UserDefaults.standard.removeObject(forKey: "MyDefaults")
print("Test C: My defaults removed \(UserDefaults.standard.object(forKey: "MyDefaults"))")

আকর্ষণীয়, সুইফটে, যখন আমি সেট টাইপ করি (শূন্য, ফরকি: ...), এবং "লাফ থেকে সংজ্ঞা" ব্যবহার করি, এটি আমাকে ইউআরএল সেটারে নিয়ে যায়। এই ফাংশনটির জন্য মন্তব্যটিতে "-set URL: forKey -setObject: forKey এর সমতুল্য: মানটি কোনও এনএসডিটাতে সংরক্ষণাগারভুক্ত ব্যতীত" " এটি কেন এটি দুর্ব্যবহার করছে তা ব্যাখ্যা করতে পারে - যেহেতু দুটি ওভারলোডেড ফাংশন রয়েছে যা শূন্য করে, তাই সুইফ্টকে একটি নির্বাচন করতে হবে, তবে সেটআরএলএর মতো আচরণ করে না।
রিচার্ড ভেনেবল

96

হ্যাঁ, উভয় কোডের লাইনের সমতুল্য, উভয়েরই ফলাফল শূন্য হবে

id obj = [[NSUserDefaults standardUserDefaults] objectForKey:@"example key"];

NSUserDefaultsকীটি না পাওয়া গেলে শূন্য করে ফিরবে। আমি এটি স্থির করার removeObjectForKeyপরিবর্তে এটি ব্যবহার করার পরামর্শ দেব ।

এখানে কী কী পরীক্ষা করতে হয় তা শূন্য করতে কী মান নির্ধারণ করা থেকে কী এন্ট্রি সরিয়ে ফেলা হয় NSUserDefaults standardUserDefaults

NSArray *keys = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] copy];
   for(NSString *key in keys) {
       NSLog(@"Key Name: %@", key);
}
[keys release];

অথবা এর মূল / মান অভিধানটি ডাম্প করুন NSUserDefaults standardUserDefaults

NSLog(@"All contents of NSUserDefaults: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);

হ্যাঁ, তবে আপনি যদি তা নির্ধারণ করেন তবে এটি স্বয়ংক্রিয়ভাবে চলে removeObjectForKey?
ma11 শেই 28

এটি 'শূন্য' তে সেট করা নিশ্চিত না থাকলে [এনএসইউসারডেফল্টস স্ট্যান্ডার্ড ইউজারডেফাল্টস] -তে মূল প্রবেশিকা সরিয়ে ফেলা হবে। একটি দ্রুত পরীক্ষা হ'ল 'AllKeys' [[[NSUserDephaults স্ট্যান্ডার্ডUserDefaults] allKeys]] পাওয়া এবং কী নামের NSArrya এর মাধ্যমে পুনরুক্তি করা, শূন্য করতে একটি কী সেট করা কি 'allKey' অ্যারে থেকে কীটি সরিয়ে দেয় কিনা তা খুঁজে বার করুন।
রকেটম্যান

9
ফলাফলটি 'ইয়েস' উভয়ই 'রিলিজঅবজেক্টফোরকি' এবং 'সেটঅবজেক্ট: নীল' মুছে ফেলবে "@ উদাহরণ কী" থেকে [এনএসউজারডেফল্টস স্ট্যান্ডার্ড ইউজারডেফাল্টস]
রকেটম্যান

9
ধন্যবাদ! আমি এটিও নিশ্চিত করেছিলাম। কেবল স্পষ্ট করে বলার জন্য, setObject:nilএটি কেবল তার কীটিই নয়, বস্তুটিও সরিয়ে ফেলবে। সুতরাং, উভয় ফাংশন ঠিক একই ফলাফল কারণ। এছাড়াও, আপনি যদি কেবলমাত্র সঞ্চিত অবজেক্ট (এবং কী) মুছে ফেলেন তবে পুরো .plist ফাইলটি মুছে ফেলা হবে।
ma11 শেই 28

1

সুইফ্ট 5.0 + আইওএস 11 এবং তারপরে

উভয় পদ্ধতিই মানটিকে সরিয়ে দেয়। খেলার মাঠে এটি চেষ্টা করে:

import Foundation

let key = "Test"
let value = "test"
let defaults = UserDefaults.standard

func printUD() {
    print("UserDefaults after modification:\n")
    defaults.dictionaryRepresentation().forEach { print("\($0): \($1)\n") }
    print("-------------\n\n")
}

defaults.set(value, forKey: key); printUD()
defaults.set(nil, forKey: key); printUD()
defaults.set(value, forKey: key); printUD()
defaults.removeObject(forKey: key); printUD()

আইওএস 11 এর আগে হবে serializing মধ্যে nilমধ্যে Dataএবং একটি ত্রুটি নিক্ষেপ করা।

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