我是 Objective-c 方面的新手,所以如果我的问题太愚蠢,请不要杀了我^^
这是我的问题:
*架构:*
我有一个对象:带有属性的访客: listOfPricePaidByGuest 此属性是一个 NSNumber 数组。所有的客人都在这个 NSMutableArray 中:currentListOfBeneficiaries
*情况:*
我有一个 UIViewController 允许用户修改listOfPricePaidByGuest中的值
我想允许用户取消所有修改。所以当视图被加载时,我将guest复制到一个新的 mutableArray 中:tempListOfBeneficiaries(我已经实现了NSMutableCoying委托并检查了这两个对象是否具有不同的内存地址)。
当用户单击Save时,我只是删除视图,因为所有修改都已完成。
当用户单击Cancel时,我只是对原始 listOfPricePaidByGuest 使用 setArray 方法。
事实是我的 tempArray 中的所有 NSnumber 也都被修改了,我不明白为什么......我已经尽我所能......
*问题:*
有谁知道使这些值不变的方法?
*一些代码:*
复制到 tempArray
for (Guest *newGuest in self.currentGrocery.listOfBeneficiaries)
{
// Copying original guest
Guest *copyGuest = [newGuest mutableCopy];
for (NSNumber *aNumber in newGuest.listOfPricePaidByGuest)
{
int index = [newGuest.listOfPricePaidByGuest indexOfObject:aNumber];
// Copying NSNumber in newGuest.listOfPricePaidByGuest
NSNumber *newNumber = [aNumber copy];
// Replace current object
[copyGuest.listOfPricePaidByGuest replaceObjectAtIndex:index withObject:newNumber];
// Releasing current copied number
[newNumber release];
}
// Add it to tempArray
[self.tempListOfBeneficiaries addObject:copyGuest];
// Releasing current copiedGuest
[copyGuest release];
}
* NSMutableCopying 委托的实现 *
-(id)mutableCopyWithZone:(NSZone *)zone
{
Guest *guestCopy = [[Guest allocWithZone: zone] init];
[guestCopy setListOfGrocery:self.listOfGrocery];
[guestCopy setListOfPricePaidByGuest:self.listOfPricePaidByGuest];
[guestCopy setGuestName:self.guestName];
[guestCopy setGuestEmail:self.guestEmail];
[guestCopy setGuestNickname:self.guestNickname];
[guestCopy setGuestPhone:self.guestPhone];
[guestCopy setTotalGuestDepense:self.totalGuestDepense];
[guestCopy setTotalGuestDepenseToPayAfterReeq:self.totalGuestDepenseToPayAfterReeq];
[guestCopy setIsComming:self.isComming];
[guestCopy setIsSend:self.isSend];
return guestCopy;
}
PS:对不起英语......现在很晚了......好吧,我是法国人,所以它解释了一切:P
感谢您的帮助:)