0

我是 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

感谢您的帮助:)

4

1 回答 1

0

问题出在数组中,而不是 NSNumbers。目前,你总是有一个数组,从来没有两个。在[Guest mutableCopyWithZone:]中,您必须复制 listOfGrocery 和 listOfPricePaidByGuest 数组:

[guestCopy setListOfGrocery:[self.listOfGrocery mutableCopy]];
[guestCopy setListOfPricePaidByGuest:[self.listOfPricePaidByGuest mutableCopy]];

拥有setListOfGrocerysetListOfPricePaidByGuest执行此复制步骤可能会更好,除非有时您需要保留输入数组。如果您使用 定义这些@property,只需使用 replaceassignretainwith copy

另外,这是使用自动引用计数还是垃圾收集?如果没有,副本需要在某个时候发布。

于 2012-04-08T01:06:03.990 回答