【问题标题】:how to remove an object inside an NSMutableDictionary which is inside a NSUserDefaults如何删除 NSUserDefaults 中的 NSMutableDictionary 中的对象
【发布时间】:2016-11-02 16:03:21
【问题描述】:

我正在尝试从 userdefaults 中的字典中删除一个对象。

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

上面的代码删除了整个字典。

XYZ 是NSMutuableDictionary。我想从 XYZ 中删除一个带有“密码”键的对象。

【问题讨论】:

  • 你能告诉我这里的 userDefault 值吗?
  • userDefaults 包含三个 nsmutable 字典。
  • ok.. 那么您是要清除三个字典中的一个还是只是其中一个字典中带有键“XYZ”的对象?
  • 显示整个代码
  • @BalajiKondalrayal 只是一个在其中一个字典中有键的对象

标签: ios objective-c nsuserdefaults nsmutabledictionary


【解决方案1】:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableDictionary *dict = [[defaults objectForKey:@"XYZ"] mutableCopy];
[dict removeObjectForKey:@"Password"];
[defaults setObject:dict forKey:@"XYZ"];

【讨论】:

  • 我试过这个。但我得到一个错误“变异方法发送到不可变对象”
  • NSUserDefaults 将返回一个不可变的 NSDictionary,制作它的可变副本。 [[defaults objectForKey:@"XYZ"] mutableCopy]
【解决方案2】:

应该这样做:

// 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];

【讨论】:

  • 你不需要同步。从 iOS 7 开始,您不需要调用它。 stackoverflow.com/questions/9647931/…
  • “从 iOS 7 开始,情况不再如此,因此您可能希望在应用程序委托的 applicationDidEnterBackground: 中调用同步:或注册到 UIApplicationDidEnterBackgroundNotification 通知来执行此操作。” --- 它并不总是在你想要的时候调用它,所以使用它确实没有什么坏处(只要你不每次设置 NSUserDefaults 时都调用它)。
  • 你刚刚引用/陈述了我在说什么...谢谢?您为什么不在应用程序进入后台时调用它一次以避免任何性能问题。 “因为这个方法是定期自动调用的,所以只有当你不能等待自动同步(例如,如果你的应用程序即将退出)或者你想更新用户默认值到磁盘上的内容时才使用这个方法尽管您没有进行任何更改。”
  • 哦,我明白你拒绝理解什么,让我更新我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多