gpt4 book ai didi

objective-c - 如何深度复制 NSDictionaries 的 NSArray?

转载 作者:行者123 更新时间:2023-12-03 16:52:53 25 4
gpt4 key购买 nike

我有一个 iPhone 应用程序,它从服务器提取一些 JSON 数据,然后将其解析为包含子数组和子字典的字典数组。

现在我把它存储在 ivar timeTable 中然后将其复制到 filteredTimetable在循环 filteredTimetable 之前并删除我不需要的对象。

我遇到的问题是当我尝试恢复阵列以便再次过滤它时。之前从复制的 NSArray 中删除的对象也会从原始 NSArray 中删除。

filteredTimeTable = [[NSMutableArray alloc] initWithArray:timeTable copyItems:YES];

我认为这是因为 filteredTimeTable只是存储指向 timeTable 中对象的指针而不是复制内存。

这是我的数据结构的示例:

    [
{"time":"09:00",
"events": [
{ "module":"COMP319", "type":"lecture", "room":"BROD-108:80" }
{ "module":"COMP320", "type":"lab", "room":"BROD-LT" }
]},

当我删除不再需要的模块时,我无法恢复该元素。

那么有没有办法做一个包含所有子对象的完整副本?

最佳答案

您可以保留原始 JSON 字符串并重新解析它。

如果您出于某种原因不想这样做,并且它都是有效的属性列表对象(NSArray、NSDictionary、NSString、NSNumber、NSDate、NSData),那么最简单的方法是使用属性列表序列化:

NSData *archive = [NSPropertyListSerialization dataWithPropertyList:originalObject format:NSPropertyListBinaryFormat_v1_0 options:0 error:NULL];
NSMutableArray *copiedObject = [NSPropertyListSerialization propertyListWithData:archive options:NSPropertyListMutableContainers format:NULL error:NULL];

关于objective-c - 如何深度复制 NSDictionaries 的 NSArray?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8372959/

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