从数据源刷新UITableView数据的干净方法



与此问题有关的内容。所以,我有两个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];

这将创建数据的副本,您可以将其与原始对象分开管理。

有很多其他方法可以处理这个问题,我建议您查看NSDictionaryNSMutableDictionary的文档以了解其他可能性。

最新更新