NSMutableDictionary中存储的NSMutableArray是否为空?

时间:2013-04-10 10:53:02

标签: ios nsmutablearray nsmutabledictionary

在我的项目中,我将NSMutableArray存储在NSMutableDictionary中。我正在FOR循环中执行此任务。实际情况是,

在for循环中

1.首先,我在NSMutableArray中存储了一些对象。

2.使用密钥在NSMutableArray中存储此NSMutableDictionary

3.然后在迭代前删除NSMutableArray中的所有对象。

我的问题,如果我在步骤2之后的NSLog NSMutableArrayNSMutableDictionay,我可以看到数组和字典中的对象。但是在步骤3之后,如果我NSLog NSMutableDictionay,只有键显示,字典中的对象也被删除。我错了。请提出一些解决方案。

这是我在项目中使用的代码。

 for (int j=0; j<wordsofline.count; j++) {
     NSString *importstr=[wordsofline objectAtIndex:j];
     NSString *importtrim=[importstr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

     if ([importtrim rangeOfString:@"FROM"].location != NSNotFound) {
         NSArray *splitImportMIB = [importtrim componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
         NSLog(@"array %@ ,,,%@",splitImportMIB,muArrImport);
        [muDictImport setObject:muArrImport forKey:[splitImportMIB objectAtIndex:1]];
         NSLog(@"Dictionary %@",muDictImport);
        [muArrImport removeAllObjects];
         NSLog(@"Dictionary %@",muDictImport);
         break;
         }

      if (![importtrim isEqualToString:@""] && [importtrim rangeOfString:@"FROM"].location == NSNotFound) {
        [muArrImport addObject:importtrim];
         }

 }

谢谢。

1 个答案:

答案 0 :(得分:5)

当您在容器中存储可变的内容时,必须停止在容器外部使用该可变对象。否则,您的修改将反映在您已存储的对象中。

例如,如果您创建一个可变数组,使用数据填充它,将其存储在某个键中,然后清除该数组,也将清除存储的数组。这是因为存储的数组和您清除的数组实际上是同一个对象:collections存储对您传递的对象的引用。

为避免这种情况,请在存储阵列之前制作不可变副本,例如使用

[muDictImport setObject:[NSArray arrayWithArray:muArrImport]
                 forKey:[splitImportMIB objectAtIndex:1]];