NSMutableDictionary中存储的NSMutableArray是否为空?

NSU*_*ult 1 nsmutablearray nsmutabledictionary ios

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

在for循环中

首先,我存储了一些对象NSMutableArray.

2.Stored这NSMutableArrayNSMutableDictionary与关键.

3. NSMutableArray然后在迭代之前删除所有对象.

我的问题,如果我在NSLog NSMutableArrayNSMutableDictionay第2步之后,我可以看到数组和字典中的对象.但是在第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];
         }

 }
Run Code Online (Sandbox Code Playgroud)

谢谢.

das*_*ght 5

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

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

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

[muDictImport setObject:[NSArray arrayWithArray:muArrImport]
                 forKey:[splitImportMIB objectAtIndex:1]];
Run Code Online (Sandbox Code Playgroud)