2016-06-30 4 views
1

Я пытаюсь удалить объект из словаря, который находится в userdefaults.как удалить объект внутри NSMutableDictionary который находится внутри NSUserDefaults

NSMutableDictionary *userDefaults = (NSMutableDictionary*)[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]; 
[userDefaults removeObjectForKey:@"XYZ"]; 

Приведенный выше код удаляет весь словарь.

XYZ является NSMutuableDictionary. Я хочу удалить объект с помощью ключа «Пароль» из XYZ.

+0

Может у меня показать значения userDefault здесь? –

+0

userDefaults содержит три словаря nsmutable. – Amon

+0

ok .. Так вы хотите очистить один из трех словарей или просто объект с ключом «XYZ» в одном из словарей? –

ответ

3
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSMutableDictionary *dict = [[defaults objectForKey:@"XYZ"] mutableCopy]; 
[dict removeObjectForKey:@"Password"]; 
[defaults setObject:dict forKey:@"XYZ"]; 
+0

Я попробовал this.but получил ошибку «метод мутирования отправить в inmutable объект» – Amon

+3

NSUserDefaults вернет неизменный NSDictionary, сделайте изменчивую копию. '[[defaults objectForKey: @" XYZ "] mutableCopy]' –

3

Это следует сделать это:

// Access the dictionary you want to edit as a mutable copy 
NSMutableDictionary *dict = [[[NSUserDefaults standardUserDefaults] objectForKey:@"dictKey"] mutableCopy]; 

// Remove the object for the key 
[dict removeObjectForKey:@"keyToRemove"]; 

// Set the dictionary back in user defaults 
[[NSUserDefaults standardUserDefaults] setObject:dict forKey:@"dictKey"]; 

// Save your changes: 
// If you need 
// In applicationDidEnterBackground: in iOS >= 7.0 
// If you are using iOS < 7.0 
[[NSUserDefaults standardUserDefaults] synchronize]; 
+0

вам не нужно синхронизировать. Начиная с iOS 7 вам не нужно его вызывать. http://stackoverflow.com/questions/9647931/nsuserdefaults-synchronize-method – brl214

+0

«С прошивкой 7, больше не бывает, так что вы можете вызвать синхронизацию в applicationDidEnterBackground своего приложения делегата: или зарегистрируйтесь, чтобы получить уведомление UIApplicationDidEnterBackgroundNotification сделать что." --- Он не всегда вызывает это, когда вы хотите, поэтому на самом деле нет никакого вреда в его использовании (если вы не вызываете его каждый раз, когда вы устанавливаете NSUserDefaults). – WMios

+0

Вы просто цитировали/заявили, что именно я говорил ... Спасибо? Почему бы вам просто не называть его один раз, когда приложение входит в фоновый режим, чтобы избежать каких-либо проблем с производительностью. «Поскольку этот метод автоматически вызывается с периодическими интервалами, используйте этот метод только в том случае, если вы не можете дождаться автоматической синхронизации (например, если ваше приложение собирается выйти) или если вы хотите обновить настройки по умолчанию на том, что находится на диске, даже хотя вы не внесли никаких изменений ». – brl214

Смежные вопросы