与此问题有关的内容。所以,我有两个NSMutableDictionary。DictA是原始数据,而DictB将是UITableVIew从中获取数据的数据。如果用户通过某种方式进行筛选,我可以删除DictB中不应该显示的所有对象,然后调用[table reloadData],这很好,实现方式如下:
NSMutableDictionary filterSelection = [DictA objectForKey:what the user picked];
[dictB removeAllObjects];
dictB = filterSelection;
[table reloadData];
这将使UITableView仅显示用户过滤的内容。
问题开始于此:
- 如何将所有数据"刷新"回DictB,以便用户进行新的选择?即DictB=DictA(显然由于引用类型的原因,它不起作用,只是把它放在那里,以表明我需要再次过滤所有数据)。这在任何情况下都不起作用,因为从dictB中删除所有对象会从dictA中删除所有内容,因为它们引用的是内存中相同的对象
欢迎任何建议,我觉得我的想法是正确的,只是在执行中迷失了方向。
您可以调用
[dictB addEntriesFromDictionary:dictA];
并且应该将所有内容从CCD_ 1复制到CCD_。现在,在这样做之前,您可能必须清除dictB
,但它应该可以在中工作
NSMutableDictionary
像dictB = [dictA copy];
这样简单的东西也可以工作。但不确定是否存在保留计数或类似问题。
我真的不确定数据模型是如何设置的,但一般来说,内存中不需要有指向同一对象的两个指针。例如:
dictB = dictA;
以上只是创建了一个参考,可能就是您正在做的。
dictB = [NSMutableDictionary dictionaryWithDictionary:dictA];
这将创建数据的副本,您可以将其与原始对象分开管理。
有很多其他方法可以处理这个问题,我建议您查看NSDictionary
和NSMutableDictionary
的文档以了解其他可能性。