私は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
助けてくれてありがとう:)