2

MyObjects の NSArray があります。

配列の最後のオブジェクトを複製したい。つまり、最後のオブジェクトとまったく同じ配列に新しいオブジェクトを追加したいと考えています。

私が試した:

id object = [[self arrangedObjects] lastObject]; 
id newObject = [object copy];

しかし、コピー メソッドは NSObject に実装されていないため、使用できないことに気付きました。

MyObject クラスに copy メソッドを実装し、MyObject の新しいインスタンスを返し、次のようにコードを変更する必要があります。

MyObject object = [[self arrangedObjects] lastObject]; 
MyObject newObject = [object copy];

それとも他のソルトインはありますか?

UPDATE NSObjectのドキュメントから

NSObject 自体は NSCopying プロトコルをサポートしていません。サブクラスはプロトコルをサポートし、copyWithZone: メソッドを実装する必要があります。copyWithZone: メソッドのサブクラス バージョンは、サブクラスが NSObject から直接派生しない限り、最初にスーパーにメッセージを送信してその実装を組み込む必要があります。

4

2 に答える 2

1

オブジェクトがNSObjectの場合、NSCopyingプロトコルを実装する新しいNSObjectカテゴリを作成できます。必ずすべてのキーを繰り返し処理し、それらの値を新しいオブジェクトにコピーしてください。ディープコピーの場合は、その値オブジェクトごとに「copy」も呼び出す必要があります。

オブジェクトがカスタムの場合は、そのクラスにプロトコルを実装します。

配列にオブジェクトが混在している場合は、それらすべてにNSCopyingプロトコルを実装する必要があります<NSCopying>。そのため、コンパイル時の警告/エラーを回避するために、オブジェクトを宣言するときにidを使用できます。

于 2011-09-26T08:19:57.757 に答える
0

私の知る限り、オブジェクトをコピーする場合は、NSObjectメソッドを使用できるNSCopyingプロトコルを実装します。 - (id)copy

- (id)copyWithZone:(NSZone *)zoneメソッドで、新しいオブジェクトを割り当ててから、その+ (id)allocWithZone:(NSZone *)zoneメンバーをコピーし、その状態を更新します。

于 2011-09-26T07:50:51.180 に答える