iOS - 防止更改一个数组中的项目影响另一个 - 目标C.

时间:2017-03-23 11:24:53

标签: ios objective-c arrays

我有2个数组:_user.itemList(global)和updatedList(特定于该类)。

for(Item *item in _user.itemList) {
    if(![item.isLinked isEqualToString: @"YES"]  && item != self.item) {
        [updatedList addObject:item];
    }
}

Item *item = updatedList[0];
item.isLinked = @"YES";

现在,我不希望_updatedList中更改的值反映在_user.itemList中,直到我按下save。

但是由于我们在这里处理指针,所以在此步骤之后,_user.itemList [0]的isLinked被设置为“YES”。我该如何防止这种情况发生?

我已经尝试过mutableCopy-而不是将项目添加到updatedList,而是将其添加到新数组(copArray)并将updatedList设置为该数组的值。

updatedItem = [copArray mutableCopy];

这不起作用。

2 个答案:

答案 0 :(得分:0)

由于您正在处理自定义对象,因此您需要在使用之前手动复制对象。

在Item类中编写一个方法来制作实例的副本

Item *item = updatedList[0];

并替换

Item *item = [(Item*)updatedList[0] copy];

updatedList[0]

现在,您的更改不会受- (Item *)saveDataFromInstance:(Item *)backupInstance { self.XXXX = backupInstance.XXXX // Copy all your member values to the original instance return self; } 对象的影响。

如果需要,可以再编写一个方法来保存实例。对于您的情况,这将是您的保存操作。

[(Item*)updatedList[0] saveDataFromInstance:item];

最后将复制的值保存到原始对象

{{1}}

答案 1 :(得分:0)

你应该把这些:

Item *item = updatedList[0];
item.isLinked = @"YES";
你的for循环中的

语句如下:

for(Item *item in _user.itemList) {
    if(![item.isLinked isEqualToString: @"YES"]  && item != self.item) {
        item.isLinked = @"YES";
        [updatedList addObject:item];
    }
}

我认为,当您将项目isLinked = @"YES"添加到更新列表中时,这是您的目的。您不需要在loop之后执行此操作。