复制NSNumber数组

时间:2012-04-07 23:33:40

标签: iphone objective-c copy nsnumber

我在Objective-c倾向上很新,所以如果我的问题太愚蠢,请不要杀我^^

我的问题是:

* 架构:*

我有一个带有属性的 Guest listOfPricePaidByGuest 此属性是NSNumber的数组。 所有来宾都在这个NSMutableArray中: currentListOfBeneficiaries

* 情况:*

我有一个UIViewController,我允许用户修改 listOfPricePaidByGuest

中的值

我想允许用户取消所有修改。 因此,当加载视图时,我正在一个新的mutableArray中复制guest虚拟机: tempListOfBeneficiaries (我已经实现了 NSMutableCoying 委托并检查了两个对象是否有不同的记忆地址)。

当用户点击保存时,我正在删除视图,因为所有修改都已完成。

当用户点击取消时,我正在使用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

感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

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

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

除非有时您需要保留输入数组,否则让setListOfGrocerysetListOfPricePaidByGuest执行此复制步骤可能会更好。如果您使用@property定义这些内容,只需将assignretain替换为copy

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