我有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];
这不起作用。
答案 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
之后执行此操作。