gpt4 book ai didi

ios - NSMutableDictionary 中存储的 NSMutableArray 变空?

转载 作者:行者123 更新时间:2023-12-01 17:56:53 25 4
gpt4 key购买 nike

在我的项目中,我存储 NSMutableArrayNSMutableDictionary .我在 FOR 中执行此任务loop.实际情况是,

在 for 循环内

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

2.存储这个NSMutableArrayNSMutableDictionary用 key 。

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];
}

}

谢谢你。

最佳答案

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

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

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

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

关于ios - NSMutableDictionary 中存储的 NSMutableArray 变空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15923831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com