1

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

在 for 循环内

1.首先我将一些对象存储在NSMutableArray.

2.NSMutableArrayNSMutableDictionary钥匙把它存起来。

NSMutableArray3.然后在迭代之前删除所有对象。

我的问题,如果我 NSLogNSMutableArray并且NSMutableDictionay在第 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];
         }

 }

谢谢你。

4

1 回答 1

5

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

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

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

[muDictImport setObject:[NSArray arrayWithArray:muArrImport]
                 forKey:[splitImportMIB objectAtIndex:1]];
于 2013-04-10T11:00:00.663 回答