根据索引和键更新NSMutableArray值

时间:2014-10-06 22:49:38

标签: ios objective-c

在xCode中,我已经使用来自我的网络服务器的json数据填充了一个NSMutableArray。 我在数组中有100个条目 - 每个条目都有一个名称,地址,网站等....

现在我想创建一个for循环并更新每个条目的名称 - 但我不知道如何做到这一点。我需要这样的东西:

for(int i=0; i < jsonArray.counter; i++)
{
 [[jsonArray objectAtIndex:i] objectForKey:@"name"] = "bla bla bla";
}

我知道这个例子不会起作用,但我认为你知道我在你看到它时想做什么;)

2 个答案:

答案 0 :(得分:0)

在你的情况下,你需要使用setObject For Key方法,假设jsonArray中的每个条目都是一个NSMutableDictionary对象

for(id object in jsonArray)
    [object setObject:@"bla bla bla" forKey:@"name"];

更新

for(id object in jsonArray)
{
    NSMutableDictionary *mutableObject=[NSMutableDictionary dictionaryWithDictionary:object];
    [mutableObject setObject:@"bla bla bla" forKey:@"name"];
    [jsonArray replaceObjectAtIndex:[jsonArray indexOfObject:object] withObject:mutableObject];
}

答案 1 :(得分:0)

您通过网络从磁盘/接收中读取的内容往往是不可变对象的不可变集合的不可变集合。

为了能够改变事物,您需要将您更改的任何集合转换为可变形式。

@ NofelMahmood的帖子是朝着正确方向迈出的一步。

您可能需要更改&#34;对象图的整个分支&#34;为您想要更改的每个项目的可变对象。或者,如果您遍历整个数组,只需遍历数组,为每个项目制作一个可变副本,然后将其复制到新数组中。这解决了在枚举时你无法改变(变异)和数组的问题:

//Create an empty mutable array to contain the changed dictionaries
NSMutableArray *mutableJSONArray = [NSMutableArray arrayWithCapacity: jsonArray.count];

//enumerate through the original array.
for (NSDictionary *aDictionary in jsonArray)
{ 
  //Make a mutable copy of each dictionary in the array.
  NSMutableDictionary *mDict = [aDictionary mutableCopy];

  //Replace the value at key @"key" with some new value @"new value"
  mDict[@"key"] = @"new value"; //Replace this part as needed

  [mutableJSONArray addObject; mDict];
}

免责声明:上面的代码可能包含小错别字,可能最初不会编译。清理它取决于你。