【问题标题】:How to set array value and key in NSDictionary in iphone?如何在 iPhone 的 NSDictionary 中设置数组值和键?
【发布时间】:2012-08-06 15:18:46
【问题描述】:

这里我使用 NSMutableArray 来存储日期,然后我尝试在字典中设置键并分配 ArrayValue 但应用程序崩溃了,请帮助我

提前感谢

 Here i tried the code for your reference:

  [DateArray addObject:dateString]; //NSMutablArray 
  NSMutableDictionary *myDictionary =[[NSMutableDictionary alloc]init];         
  [myDictionary setObject:DateArray forKey:@"Date"]; //put array value and set key in NSDictionary.

【问题讨论】:

    标签: iphone ios object nsmutablearray nsdictionary


    【解决方案1】:

    您正在使用 NSDictionary。你应该使用 NSMutableDictionary。 NSDictionary 是不可变的。如果您想使用 NSDictionary,请使用以下方法:

    - (id)initWithObjects:(NSArray *)objects forKeys:(NSArray *)keys;
    

    【讨论】:

    • 现在我使用 NSMutableDictionary 存储日期很好,那么如何对这本字典进行排序,可以吗?
    • 字典无法排序。您可以对数组进行排序。你也应该接受我的回答,因为我之前已经给出过。
    • 你的回答很模棱两可。您刚刚给出了方法声明,而没有说明如何实际调用它。这很容易导致任何新手使用[NSDictionary initWithObjects:....,因为这是声明方法的地方。
    【解决方案2】:

    如果您使用的是 XCode 4.4 或更高版本,您可以这样做:

    [dateArray addObject:dateString]; //NSMutablArray 
    NSDictionary *myDictionary = @{ @"Date", dateArray };
    

    【讨论】:

      【解决方案3】:

      当你应该使用NSMutableDictionary时,你使用的是NSDictionary

      试试这条线:

      NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] init];
      

      iOS 中的大多数集合类都有可变和非可变版本(即

      NSArray -> NSMutableArray
      NSSet -> NSMutableSet
      NSDictionary -> NSMutableDictionary
      (and others)
      

      可变版本可让您修改内容。但是,如果您知道自己不会更改它,那么使用非可变版本会稍微快一些。

      您可以(通常)使用mutableCopy 方法从非可变类获取可变类,即

      // This array can't be changed
      NSArray *myArray = @[ @"A", @"B", @"C" ];
      
      // This array contains everything from the previous array but can now be modified
      MSMutableArray myArray2 = [myArray mutableCopy];
      

      注意:还有其他类具有可变子类,即NSURL -> NSMutableURL

      【讨论】:

      • 在回答这么长的答案之前再次检查问题。
      • 等一下,您是否对其进行了编辑并将类名从不可变更改为可变? 你改变了被问到的问题;你知道最初的提问者吗?编辑旨在使问题更正确地提出,而不是“修复”它 - 如果您想修复代码,请回答问题!
      • 看看编辑的名字,别怪我。
      【解决方案4】:

      NSDictionary 类是不可变的。您必须转换为 NSMutableDictionary。

      【讨论】:

      【解决方案5】:

      这样做:

      for(int i=0;i<[DateArray count]; i++)
      {
         [myDictionary addObject:[DateArray objectAtIndex:i] forKey:@"Date"];
      }
      

      【讨论】:

      • myDictionary 是不可变的 - 你不能在它上面调用 addObject:forKey:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      • 1970-01-01
      • 2010-11-14
      相关资源
      最近更新 更多