将NSMutableDictionary添加到NSMutableArray

时间:2016-02-04 07:15:58

标签: ios objective-c nsmutabledictionary

NSMutableArray *arrData =[NSMutableArray array];
arrData =[data objectForKey:@"data"];
NSLog(@"%@",arrData);

NSLog将打印如

data = 
(
   {
        date = "2016-01-20";
        "end_time" = "12:25:00";
        "start_time" = "11:00:00";
        "total_units" = 59;
    }
); 

此数据来自服务器。现在,我想为来自服务器的这个数组添加一个数据字典。

我做了以下事情:

NSMutableDictionary *newDict = [NSMutableDictionary dictionary];
[newDict setObject:@"2016-01-22" forKey:@"date"];
[arrData addObject:newDict]; 

现在应用程序崩溃了。出了什么问题?

[__NSArrayI addObject:]: unrecognized selector sent to instance 0x7fc4d3914d40

6 个答案:

答案 0 :(得分:0)

NSMutableArray *arrData =[NSMutableArray array];

是来自NSArray类的方法,它创建NSArray实例,而不是NSMutableArray实例。

您需要的是,例如:

NSMutableArray *arrData =[NSMutableArray arrayWithCapacity:0];

参考:https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/index.html#//apple_ref/doc/uid/20000137-SW4

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/#//apple_ref/doc/uid/20000138-SW1

答案 1 :(得分:0)

NSMutableArray *arrData = [NSMutableArray arrayWithArray:[data objectForKey:@"data"]];

请改用以上代码。 您的旧代码只是将arrData的指针移动到[data objectForKey:@“data”]]。它访问相同的地址

答案 2 :(得分:0)

for (NSDictionary *dict in [data objectForKey:@"data"])
{
    [arrData addObject:dict];
}

现在您可以添加任何想要添加到数组中的对象

答案 3 :(得分:0)

使用:

arrData = [data[@"data"] mutableCopy];

为了创建数组的可变副本。

答案 4 :(得分:0)

确保您的数组必须是可变的。尝试像这样分配你的数组

 NSMutableArray *arrData = [[NSMutableArray alloc] init];

将您的响应对象分配给您的arrData

NSMutableArray *arrData = [responseDictionary objectForKey:@"data"];

然后执行以下操作,并避免在变量名称的开头使用新关键字。

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
                       [dict setObject:@"2016-01-22" forKey:@"date"];
                       [arrData addObject:dict]; 

答案 5 :(得分:0)

您正在为NSMutableArray对象分配NSDictionary对象引用。

arrData =[data objectForKey:@"data"];

然后,当您尝试在arrData上执行 addObject 方法时,它会崩溃,因为NSDictionary对象不存在addObject方法。

使用:

[arrData addObject:[data objectForKey:@"data"]]