0

与这个问题有些相关。所以,我有两个 NSMutableDictionaries。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 中删除所有内容,因为它们引用了内存中的相同对象。

欢迎提出任何建议,我觉得我的想法是正确的,只是在执行过程中迷失了方向。

4

2 回答 2

0

你可以打电话

[dictB addEntriesFromDictionary:dictA];

这应该将所有内容dictAdictB. dictB现在你可能需要在这样做之前清除它,但它应该可以工作

NSMutableDictionary

一些简单的事情dictB = [dictA copy];也可能有效。不确定这是否有保留计数或类似问题。

于 2013-07-17T14:59:21.027 回答
0

我不太确定您的数据模型是如何设置的,但一般来说,内存中不需要有两个指向同一个对象的指针。例如:

dictB = dictA;

以上只是创建一个参考,可能是你正在做的。

dictB = [NSMutableDictionary dictionaryWithDictionary:dictA];

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

还有很多其他方法可以处理这个问题,我建议您查看文档NSDictionary以及NSMutableDictionary其他可能性。

于 2013-07-17T15:02:51.197 回答