1

我对以下代码有疑问,我需要对 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];

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

  • 手机:12-01244476
  • 第一名
  • 第二为
  • 不可变
  • -[__NSArrayI removeObject:]: 无法识别的选择器发送到实例 0x7c02580
  • 当前语言:自动;目前客观-c

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

真的需要帮助。

谢谢

4

1 回答 1

3

根据NSDictionary的文档

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

你为什么不试试:

NSMutableDictionary *myTempDict = [self.tableContents mutableCopy];
于 2012-08-02T15:11:43.497 回答