【问题标题】:Stored NSMutableArray in NSMutableDictionary gets empty?NSMutableDictionary 中存储的 NSMutableArray 变空?
【发布时间】:2013-04-10 10:53:02
【问题描述】:

在我的项目中,我将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];
         }

 }

谢谢。

【问题讨论】:

  • @AnoopVaidya:我已经编辑了我的代码,请检查。
  • 当然。您正在分配指针,然后删除该指针中的所有对象。
  • 为什么有break
  • @Desdenova : 我该如何处理这种情况?我想在开始下一次迭代之前从数组中删除所有对象。你有什么想法吗?
  • 您正在为要保存到字典中的同一实例调用方法“removeAllObjects”。

标签: ios nsmutablearray nsmutabledictionary


【解决方案1】:

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

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

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

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

【讨论】:

  • 所以我应该将 MutableArray 存储在单独的数组中,然后使用新数组将其存储在字典中。对吗?
  • @NSUserDefault 欢迎您!如果您希望存储的数组保持可变,您可以制作一个可变副本,或者创建一个新数组以在将当前数组放入数组后立即替换muArrImport,即在@987654324 之后立即调用muArrImport = [NSMutableArray array]; @调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 2013-03-24
  • 1970-01-01
  • 2014-04-13
  • 1970-01-01
相关资源
最近更新 更多