我遇到以下代码的问题,我需要对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];
现在当我运行它时,会产生以下错误:
在我的viewdidLoad上我创建了那些Array为NSMutableArray,但是现在又回到了NSArray,为什么呢? 以及如何解决这个问题的任何想法?
真的需要帮助。
由于
答案 0 :(得分:3)
copyWithZone:方法执行浅拷贝。如果你有一个任意深度的集合,为flag参数传递YES将执行表面下第一级的不可变副本。如果你传递NO,第一级的可变性不受影响。在任何一种情况下,所有更深层次的可变性都不会受到影响。
你为什么不试试:
NSMutableDictionary *myTempDict = [self.tableContents mutableCopy];