0

私はObjective-cの学習にまったく慣れていないので、私の質問があまりにもばかげている場合は、私を殺さないでください^^

私の問題があります:

*アーキテクチャ : *

私はオブジェクトを持っています: プロパティを持つゲスト: listOfPricePaidByGuest このプロパティは NSNumber の配列です。すべてのゲストはこの NSMutableArray にあります: currentListOfBeneficiaries

*状況 : *

ユーザーがlistOfPricePaidByGuestの値を変更できるUIViewControllerがあります

ユーザーがすべての変更をキャンセルできるようにしたい。したがって、ビューが読み込まれると、ゲストを新しい mutableArray にコピーします: tempListOfBeneficiaries (既にNSMutableCoyingデリゲートを実装し、2 つのオブジェクトのメモリ アドレスが異なることを確認しました)。

ユーザーが [保存] をクリックすると、すべての変更が完了したため、ビューを削除するだけです。

ユーザーが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 ではなく配列にあります。現時点では、2 つではなく、常に 1 つのアレイを使用します。では[Guest mutableCopyWithZone:]、listOfGrocery および listOfPricePaidByGuest 配列をコピーする必要があります。

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

setListOfGrocery入力配列を保持する必要がある場合を除き、このコピー手順をsetListOfPricePaidByGuest実行する方がよい場合があります。これらを で定義している場合は@property、 replaceassignまたはretainwith を使用してcopyください。

また、これは自動参照カウントまたはガベージ コレクションを使用していますか? そうでない場合は、コピーをある時点でリリースする必要があります。

于 2012-04-08T01:06:03.990 に答える