NSMutableArray of Dictionaries中的replaceobjectatindex

时间:2013-10-03 11:37:52

标签: iphone ios objective-c sorting nsmutablearray

我有一个NSMutablearray,它是一个多维数组

tblarry = [[NSMutableArray alloc]init];
for (int i=0; i<temp0.count; i++)
{
     NSMutableDictionary *tempDicts = [[NSMutableDictionary alloc]init];
     [tempDicts setObject:[temp0 objectAtIndex:i] forKey:@"UserId"];
     [tempDicts setObject:[temp1 objectAtIndex:i] forKey:@"Name"];

     [tblarry addObject:tempDicts];
 }

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"Name" ascending:YES];
[tblarry sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

在上面的代码中,temp0是带有一些用户ID的NSmutablearraytemp1是带有名称的NSmutablearray

我已将这两个数组添加到NSMutablearraytblarry)并按名称排序。

现在我想更改子数组中第一个对象的值,其名称带有以下代码

[[[tblarry replaceObjectAtIndex:0] objectForKey:@"Name"] withObject:@"first name"];

但它显示错误

No visible @interface for 'NSMutableArray' declares the selector 'replaceObjectAtIndex:'

2 个答案:

答案 0 :(得分:2)

您没有使用多维数组 - 您有一系列词典。检索字典,然后为Name键设置新值。

NSMutableDictionary *userDictionary = [tblarry objectAtIndex:0]; //First user
[userDictionary setObject:@"first name" forKey:@"Name"];

答案 1 :(得分:1)

是的,您的实施不正确。 正确的方法是,

  [tblarry replaceObjectAtIndex:[[tblarry objectAtIndex :0] objectForKey:@"Name"] withObject:@"first name"];

现在我告诉你它为什么不正确,

[[[tblarry replaceObjectAtIndex:0] objectForKey:@"Name"] withObject:@"first name"];

当您触发[[tblarry replaceObjectAtIndex:0] objectForKey:@"Name"]时,这意味着您尝试访问tblarry中的字典,但您尝试替换ObjectAtIndex。你的语法出错了。只是你发生冲突。

如果你想在数组中保存字典,

NSDictionary *values = [NSDictionary dictionaryWithObjectsAndKeys:
                        [NSNumber numberWithInt:num], @"UserId",
                        [NSNumber numberWithInt:sender.tag], @"name",
                        nil];
   [tblarry addObject:values];
While retrieve time ,
  NSInteger  firstValue = [[[tblarry objectAtIndex:0] objectForKey:@"UserId"] intValue];
  NSInteger  tagValue =  [[[tblarry objectAtIndex:0]  objectForKey:@"name"] intValue];