将NSDictionary中的每个NSArray更改为Mutable

时间:2012-08-02 15:02:53

标签: objective-c ios nsmutablearray nsarray

我遇到以下代码的问题,我需要对NSMutableDictionary中的每个数组进行一些修改。当我第一次将这些数组添加到字典中时,它们是“MutableArray”,但当我尝试用它们做某事时,它们就变成了“NSArray”。

这是我的代码:

UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
    NSString *cellText = selectedCell.textLabel.text;
    NSLog(@"cell: %@", cellText);

    Boolean flag = false;
    NSMutableDictionary *myTempDict = [[NSMutableDictionary alloc] initWithDictionary:self.tableContents copyItems:YES];

    for (NSString *key in myTempDict) 
    {
        NSLog(@"1st for");
        for(NSString *myString in [myTempDict objectForKey:key])
        {
            NSLog(@"2nd for");
            if([myString isEqualToString:cellText])
            {
                if([[myTempDict objectForKey:key] isKindOfClass:[NSMutableArray class]])
                {
                    NSLog(@"mutable");
                }
                else if([[myTempDict objectForKey:key] isKindOfClass:[NSArray class]])
                {
                    NSLog(@"not mutable");
                }
                [[myTempDict objectForKey:key] removeObject:myString];
                break;
                NSLog(@"break1");
            }
            NSLog(@"2nd for end");
        }
        if(flag)
        {
            break;
            NSLog(@"break2");
        }
    }
    self.tableContents = myTempDict;
    [tableView reloadData];

现在当我运行它时,会产生以下错误:

  • cell:12-01244476
  • 1st for
  • 第二次
  • 不可变
  • - [__ NSArrayI removeObject:]:无法识别的选择器发送到实例0x7c02580
  • 当前语言:auto;目前objective-c

在我的viewdidLoad上我创建了那些Array为NSMutableArray,但是现在又回到了NSArray,为什么呢? 以及如何解决这个问题的任何想法?

真的需要帮助。

由于

1 个答案:

答案 0 :(得分:3)

根据NSDictionary

的文件

copyWithZone:方法执行浅拷贝。如果你有一个任意深度的集合,为flag参数传递YES将执行表面下第一级的不可变副本。如果你传递NO,第一级的可变性不受影响。在任何一种情况下,所有更深层次的可变性都不会受到影响。

你为什么不试试:

NSMutableDictionary *myTempDict = [self.tableContents mutableCopy];