【问题标题】:Update nsmutableDictionary insert a new key更新 nsmutableDictionary 插入新键
【发布时间】:2013-06-06 12:43:42
【问题描述】:

我有一个像这样的nsmutabeldictionary

   {
        alert = "test from dot net";
        badge = 1;
        sound = default;
    }

并且想要一个值为 10 的键“ID”,就像

     {
        alert = "test from dot net";
        badge = 1;
        sound = default;
        ID  = 10;
    }

请帮忙

【问题讨论】:

  • 您是否尝试过编写任何代码来执行此操作?你能展示你尝试过的Objective-C代码吗?

标签: objective-c nsmutabledictionary


【解决方案1】:

来自您的评论:

'NSUnknownKeyException',原因:'[<__nsdictionaryi> setValue:forUndefinedKey:]:

看起来你实际上有一个不可变的字典(注意 I 后缀)。

我想你的代码是这样的:

//Even though you are assigning to a mutable object
//The method may not return an mutable dictionary
NSMutableDictionary *d = [someObject getDictionary]; 

你应该改用:

NSMutableDictionary *d = [NSMutableDictionary dictionaryWithDictionary:[someObject getDictionary]];

那么你就可以放心使用了:

[d setObject:@10 forKey:@"ID"];

【讨论】:

    【解决方案2】:

    您只需拨打setObject:forKey

    将给定的键值对添加到字典中。

    - (void)setObject:(id)anObject forKey:(id < NSCopying >)aKey 
    

    参数

    一个对象

    aKey 的值。强烈参考 对象由字典维护。引发 如果 anObject 为 nil,则 NSInvalidArgumentException。如果你需要 表示字典中的 nil 值,使用 NSNull。

    一键

    关键 价值。密钥被复制(使用 copyWithZone:; 密钥必须符合 NSCopying 协议)。如果 aKey 引发 NSInvalidArgumentException 是零。如果字典中已经存在 aKey,则 anObject 将获取它的 地点。

    在您的示例中,您可以这样称呼它:

    [yourMutableDictionary setObject:[NSNumberWithInt:10] forKey:@"ID"]
    

    另外,记住你必须传递一个 NSObject。所以你应该使用[NSNumberWithInt:10] 而不仅仅是10

    【讨论】:

      【解决方案3】:

      要向字典中添加带有新键的新对象,可以使用 SetObject:forKey 方法。

      【讨论】:

      • 尝试这个但得到这种类型的错误由于未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[<__nsdictionaryi> setValue:forUndefinedKey:]:这个类不符合键值编码关键测试。 *** 首先抛出调用栈:
      • 那是setValue: 你应该试试setObject:
      • 好像你有 NSDictionary 对象..如果你想在运行时编辑它,你必须有 NSMutabledictionary
      猜你喜欢
      • 2013-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      相关资源
      最近更新 更多