2

私にはクラスがあります、クラスの人と言います。クラスよりもいくつかのNSMutableArrayがあります。

@property NSMutableArray *arrayOne;
@property NSMutableArray *arrayTwo;
...

次に、そのクラスをコピーして、関数からクラスを返し、そのコピーを使用してデータを変更できるようにします。同じアドレスへの別の参照ではなく、オブジェクトの新しいコピーをメモリに入れたい。

これを行うために、Person.mにこれを実装しました。

-(id)copyWithZone:(NSZone *)zone
{
    Person *copy = [[Person allocWithZone:zone] init;
    copy.arrayOne = [NSMutableArray arrayWithArray:self.arrayOne];
    copy.arrayTwo = [NSMutableArray arrayWithArray:self.arrayTwo];
    ...

    return copy;
}

これまでのところ、これは私が望むように機能しますが、コピーの配列を並べ替えようとすると、エラーが発生します:-[__ NSArrayI sortUsingSelector:]:認識されないセレクターがインスタンス0x100108a30に送信されました

元の配列のタイプは「_NSArrayM」ですが、コピーは「 _NSArrayI」です。

それで私は何を間違えましたか?NSArchiverとNSUnarchiverを使用したディープコピーについて聞いたことがあります...それを使用する必要がありますか?申し訳ありませんが、私はCとObjective-Cにまったく慣れていません...:D

あなたがこれから私を助けてくれることを願っています。=)

私の「学校英語」について申し訳ありません。

乾杯、ニック

編集:配列はNSStringオブジェクトで構成されているため、次を使用できます

sortUsingSelector:@selector(caseInsensitiveCompare:)

配列をソートします。

4

1 に答える 1

3

可変配列プロパティはヘッダーファイルでどのように宣言されていますか?

// Wrong
@property (copy) NSMutableArray *array;
@property (assign) NSMutableArray *array;

// Right
@property (strong) NSMutableArray *array;

NBあなたがしているだけなら

@property NSMutableArray *array;

それから私はあなたのコードがこれまでに到達したことに驚いています:)デフォルトのプロパティメモリセマンティクスはassign-です-これはARCに配列を保持するようにまったく指示しません:)指定する必要がありますstrong

于 2012-10-06T23:33:28.470 に答える