【发布时间】:2012-04-07 23:33:40
【问题描述】:
我是 Objective-c 方面的新手,所以如果我的问题太愚蠢,请不要杀我^^
这是我的问题:
*架构:*
我有一个对象:Guest,有一个属性:listOfPricePaidByGuest 该属性是一个 NSNumber 数组。 所有的客人都在这个 NSMutableArray 中:currentListOfBeneficiaries
*情况:*
我有一个 UIViewController,我允许用户修改 listOfPricePaidByGuest
中的值我想允许用户取消所有修改。 因此,当视图被加载时,我将客人复制到一个新的 mutableArray 中:tempListOfBeneficiaries(我已经实现了 NSMutableCoying 委托并检查了这两个对象是否具有不同的内存地址)。
当用户点击保存时,我只是删除视图,因为所有修改都已完成。
当用户点击 Cancel 时,我只是使用 setArray 方法来处理原始 listOfPricePaidByGuest。
事实是我的 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
感谢您的帮助:)
【问题讨论】:
-
Tu parle l'anglais mieux que je parle la français。不过为了澄清起见,您希望能够将一个 NSArray 设置为等于另一个?
-
您需要构造一个新数组,而不仅仅是替换单个数组元素。这应该发生在
[Guest mutableCopy]内。您可以发布您当前的[Guest mutableCopy]来源吗?此外,如果您想要保存/取消行为,请更改tempArrayOfBeneficiaries。保存时,将更改复制到currentListOfBeneficiaries。取消时,丢弃它。 -
@CodaFi 谢谢 ^^ 我只是将旧值替换为 currentArray。
-
@Dondragmer 我已经尝试过这样做......但它更复杂......我在使用 NSUserdefaults 保存客人时遇到了一些问题......我添加了我的 mutableCopySource 权利现在:)!
-
@Dondragmer 问题不在于当我试图用旧数组替换我的数组时,我有一个 NSLog 一直显示我的两个数组内容,以及当修改这些 NSNumber完成了,我的两个 NSNumber 数组受到影响!
标签: iphone objective-c copy nsnumber