为什么Core数据NSSet会反转我的数组?

时间:2016-02-25 14:36:50

标签: core-data nsarray nsset

我有一个public void setCart(ArrayList<HashMap<String, String>> data) { if(cart != null && cart.size() > 0) cart.addAll(data); else cart = data; } 数组,每个数组都有一个ArrayList数组。

这种关系可以这样描述:

ArrayList<HashMap<String, String>> cart = new ArrayList<HashMap<String, String>>();

对象由核心数据管理。

当在表格视图中显示时,每个单元格都有两个按钮,因此用户可以从单独的视图控制器中选择一个战斗机;然后当它返回时它将更新分段战斗机关系。

因为if-else与非变异cart.addAll(data);的关系,我需要修改它以便;

如果

  1. 用户按下左键,这表示正在挑选segment.fighter中的第一个对象

  2. 用户按下右键,表示正在挑选segment.fighter中的最后一个对象

  3. 当我来更新关系时,有时候;取决于用户按下的按钮顺序; segments中对象的位置被反转。

    即:

      

    有时候应该在0号位置的战斗机与a交换   位置1的战斗机,当这种情况永远不会发生时。

    我的代码如下;

    fighters

    我正在使用NSMutableArray,以便我可以替换数组中的确切对象。

    我可以证明它可以通过日志工作

    One `segment` can have many `fighters`
    

    然而,当它分段战斗机输出时,战斗机被交换;但我的问题是 -

    为什么NSSet会反转我的数组?

    非常感谢

1 个答案:

答案 0 :(得分:1)

allObjects是无序的对象集合。您使用的属性NSOrderedSet返回一个数组,但正如此方法的文档所述“数组中对象的顺序未定义。”。

因此,无论何时尝试从集合中获取数组,您都可以获得不同的顺序。

为了确保订单不会改变,你应该a)为战士使用有序关系 - 但不是一个好主意,因为allObjects是数组和集合之间的混合。 b)对从{{1}}返回的数组应用排序,以使顺序一致。这是我的首选方法。