আমি +[NSUserDefaults standardUserDefaults]
অ্যাপ্লিকেশন সেটিংস সঞ্চয় করতে ব্যবহার করছি । এটিতে প্রায় এক ডজন স্ট্রিং মান রয়েছে। এই মানগুলি কেবল একটি ডিফল্ট মান হিসাবে সেট করার পরিবর্তে স্থায়ীভাবে মুছে ফেলা সম্ভব?
আমি +[NSUserDefaults standardUserDefaults]
অ্যাপ্লিকেশন সেটিংস সঞ্চয় করতে ব্যবহার করছি । এটিতে প্রায় এক ডজন স্ট্রিং মান রয়েছে। এই মানগুলি কেবল একটি ডিফল্ট মান হিসাবে সেট করার পরিবর্তে স্থায়ীভাবে মুছে ফেলা সম্ভব?
উত্তর:
আপনি অ্যাপ্লিকেশনটির অবিরাম ডোমেনটিকে এভাবে মুছে ফেলতে পারেন:
NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];
সুইফ্ট 3 এবং তারপরে:
if let bundleID = Bundle.main.bundleIdentifier {
UserDefaults.standard.removePersistentDomain(forName: bundleID)
}
এটি @ সামভারমেট এর উত্তরের মতো তবে এটি সামান্য ক্লিনার আইএমও।
এই কোডটি রেজিস্ট্রেশন ডোমেনে ডিফল্টগুলি পুনরায় সেট করে:
[[NSUserDefaults standardUserDefaults] setPersistentDomain:[NSDictionary dictionary] forName:[[NSBundle mainBundle] bundleIdentifier]];
অন্য কথায়, এটি removeObjectForKey
আপনি যে অ্যাপ্লিকেশনটিতে নিবন্ধভুক্ত প্রতিটি একক কী এর জন্য।
[NSUserDefaults resetStandardUserDefaults]
এটি না করা আমার বাইরে।
আপনি ব্যবহার করার চেষ্টা করেছেন - removeObjectForKey
?
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"defunctPreference"];
সুইফটে উত্তরটি এখানে:
let appDomain = NSBundle.mainBundle().bundleIdentifier!
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(NSBundle.mainBundle().bundleIdentifier!)
ওয়ান-লাইনার
if let domainName = NSBundle.mainBundle().bundleIdentifier { NSUserDefaults.standardUserDefaults().removePersistentDomainForName(domainName) }
UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)
বিকাশের সময় আপনার যদি এটির প্রয়োজন হয় তবে আপনি সমস্ত সরিয়ে মুছে নিজের সিমুলেটরটিও পুনরায় সেট করতে পারেন NSUserDefaults
।
আইওএস সিমুলেটর -> সামগ্রী এবং সেটিংস পুনরায় সেট করুন ...
মনে রাখবেন যে এটি সিমুলেটারের সমস্ত অ্যাপ্লিকেশন এবং ফাইলগুলিও মুছে ফেলবে।
সুইফটে:
let defaults = NSUserDefaults.standardUserDefaults()
defaults.dictionaryRepresentation().keys.forEach { defaults.removeObjectForKey($0) }
দ্রষ্টব্য: এই উত্তরটি সুইফ্টের জন্যও আপডেট করা হয়েছে।
এটি কি এক লাইনে আছে?
@ ক্রিসটফার রজার্সের উত্তর বাড়ানো - স্বীকৃত একটি one
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
এবং হ্যাঁ, কখনও কখনও আপনার synchronize
এটির প্রয়োজন হতে পারে,
[[NSUserDefaults standardUserDefaults] synchronize];
আমি এটি করার জন্য একটি পদ্ধতি তৈরি করেছি,
- (void) clearDefaults {
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
[[NSUserDefaults standardUserDefaults] synchronize];
}
সুইফট ?
দ্রুত সঙ্গে এটি আরও সহজ।
extension UserDefaults {
class func clean() {
guard let aValidIdentifier = Bundle.main.bundleIdentifier else { return }
standard.removePersistentDomain(forName: aValidIdentifier)
standard.synchronize()
}
}
এবং ব্যবহার :
UserDefaults.clean()
কোডগুলি ক্লিনার করার সময় আমি এক্সটেনশানগুলি পছন্দ করি:
extension NSUserDefaults {
func clear() {
guard let domainName = NSBundle.mainBundle().bundleIdentifier else {
return
}
self.removePersistentDomainForName(domainName)
}
}
সুইফট 5
extension UserDefaults {
func clear() {
guard let domainName = Bundle.main.bundleIdentifier else {
return
}
removePersistentDomain(forName: domainName)
synchronize()
}
}
আমি এটি খুঁজে পেয়েছি:
osascript -e 'tell application "iOS Simulator" to quit'
xcrun simctl list devices | grep -v '^[-=]' | cut -d "(" -f2 | cut -d ")" -f1 | xargs -I {} xcrun simctl erase "{}"
সূত্র: https://gist.github.com/ZevEisenberg/5a172662cb576872d1ab
এটি একটি বাগ বা যা কিছু যা removePersistentDomainForName
সমস্ত NSUserDefaults
মান মুছে ফেলার সময় কাজ করছে না ।
সুতরাং, আরও ভাল বিকল্পটি হ'ল পুনরায় সেট করা PersistentDomain
এবং আপনি নিম্নলিখিত উপায়ের মাধ্যমে এটি করতে পারেন:
NSUserDefaults.standardUserDefaults().setPersistentDomain(["":""], forName: NSBundle.mainBundle().bundleIdentifier!)
@ ফলসের উত্তরটি প্রসারিত করা হচ্ছে ... আমি বিশ্বাস করি আরও সঠিক বাস্তবায়ন হবে ...
NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
NSDictionary *defaultsDictionary = [[NSUserDefaults standardUserDefaults] persistentDomainForName: appDomain];
for (NSString *key in [defaultsDictionary allKeys]) {
NSLog(@"removing user pref for %@", key);
[[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
}
... এনএসইউসারডেফল্টের অবিচলিত ডোমেনফোর্ডনাম: পদ্ধতিতে কল করা হচ্ছে। দস্তাবেজগুলির বিবরণ হিসাবে, পদ্ধতিটি "নির্দিষ্ট ধ্রুবক ডোমেনে কী এবং মানগুলি সম্বলিত একটি অভিধান প্রদান করে" " অভিধানকে কল করাপরিবর্তন: পরিবর্তে, এমন একটি অভিধান প্রদান করবে যা সম্ভবত অন্যান্য সেটিংসকে অন্তর্ভুক্ত করবে কারণ এটি বিস্তৃত সুযোগের ক্ষেত্রে প্রযোজ্য।
যদি আপনাকে পুনরায় সেট করতে হয় এমন মানগুলির কোনও ফিল্টার করতে হয় তবে কীগুলির মাধ্যমে পুনরাবৃত্তি হ'ল এটি করার উপায়। স্পষ্টতই, আপনি যদি অ্যাপ্লিকেশনটির জন্য কেবলমাত্র সমস্ত প্রিফকেই বিবেচনা না করেই চান, তবে উপরের পোস্ট করা অন্য একটি পদ্ধতি সবচেয়ে কার্যকর।
যদি অ্যাপ্লিকেশন সেটিংটির পুনঃনির্ধারণের প্রয়োজন হয় মাইক্রোফোনে অ্যাক্সেসের জন্য nsuserdefault (আমার কেস), অ্যান্টনি ম্যাককর্মিকের আইফোন থেকে একটি সহজ সমাধানের উত্তর দেওয়া হয়েছে ( আইফোন - ডিভাইসে মিডিয়াতে অ্যাপ্লিকেশন অ্যাক্সেসকে কীভাবে সক্ষম করা যায়? - ALAssetsLibraryErrorDomain Code = -3312 "গ্লোবাল অস্বীকৃত অ্যাক্সেস" )।
ডিভাইসে, সেটিংস> সাধারণ> রিসেট> অবস্থান সতর্কতা পুনরায় সেট করুন এ যান
এটি চেষ্টা করুন, এটা আমার জন্য কাজ করছে।
কোডের একক লাইন
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];