1

NSCopyingとに準拠するカスタムクラスを作成しましたNSMutableCopying

との実装を追加しましたが、オブジェクトを呼び出して別のメソッドを呼び出そうとすると、ivarを呼び出しても、一部のivarが不変になっているため、クラッシュし-copyWithZone:ます。-mutableCopyWithZone:-mutableCopy-mutableCopyWithZone:

クラスをコピーする方法は次のとおりです。

MyObject *flipped = [list mutableCopy];
[MyObject flip:flipped];

(コードは、ivarで+flip:使用しようとするため、removeObjectAtIndex:失敗します)addObject:NSMutableArray

クラスをコピーする方法は次のとおりです。

- (id)mutableCopyWithZone:(NSZone *)zone {

    id instance = nil;

    if ((instance = [[[self class] alloc] init])) {

        [instance setArray:[self.array mutableCopyWithZone:zone]];
        [instance setObjects:[self.objects mutableCopyWithZone:zone]];

        [instance setItemCount:self.itemCount];

    }

    return instance;

}

なぜ失敗するのかはわかりませんが、なぜそれが作成されず、変更可能でないのかは本当にわかりませarrayobjects

助けていただければ幸いです。

4

1 に答える 1

3

私の最後のアイデア:setArray:setObjects:メソッドが実際に として宣言されたプロパティのセッターである場合、@property (copy)渡された配列をコピーし、copy常に不変オブジェクトを返します。この場合、これを修正する簡単な方法は、(retain)代わりに として宣言することです(copy)

于 2013-02-12T20:42:29.693 に答える