2012-07-10 3 views
5

デフォルトでは、データモデルからNSManagedObjectサブクラスファイルを作成するとき、Core Dataは文字列型列のNSString(非原子的、保持)のプロパティを作成します。私はパフォーマンスの考慮のために行われるかもしれませんが、コアデータのNSManagedObjectサブクラスがモデルクラスから分離されているData Mapperパターンを実装しています。したがって、モデルクラスをコアデータNSManagedObjectサブクラスに変換するときは、retainは単にコピーではなくポインタを割り当てます。アーキテクチャーの観点からは、コアデータアクセスとモデルクラスの間の論理分離を制圧するので、retainの代わりにcopyを使用する必要があります。NSManagedObjectのNSStringプロパティを "保持"ではなく "コピー"にするにはどうすればいいですか?

NSManagedObjectサブクラスのプロパティを手動で変更する唯一の方法はありますか?

+0

通常の(変更不可能な) 'NSString'の' copy'メソッドは同じインスタンスを返しますので、あなたのコピープロパティを気にしないで、実際には何もコピーしませんあなたがそれをテストするとき。 – Monolo

+0

はい、私はそれが既にテストされていることを認識しています。 "Copy"は、可変型オブジェクトだけをコピーします。また興味深いことに、 "copy"プロパティはNSArray要素にもコピーメッセージを送信するので、配列内に存在する場合は変更可能な文字列がコピーされます。 – Centurion

+0

答えの下に私のコメントを見てください。今日では、実用的な "コピー"特性を理解しようとしました。どのように動作するのか理解しています。NSMutableStringを使用する必要はありませんでした。私の経験ではコピーは冗長で、今後の保護のためだけです。 – Centurion

答えて

4

これを実行する唯一の方法は、NSManagedObjectサブクラスのプロパティの宣言を変更することです。ありがたいことに、Core Dataは残りの部分を自動的に処理します。

+0

開発プロセス中に一部のエンティティがコアデータモデルスキーマで変更される可能性が高いため、NSManagedObjectsを再生成すると、編集したプロパティを上書きして「保持」するようになります。だから、少し不便です。 – Centurion

+0

また、 "コピー"プロパティに関する私の考えを共有したいと思います。このプロパティは、NSMutableStringプロパティの値を外部から変更できないようにします。 NSNumberとNSDateは変更できません。したがって、 "copy"は文字列にのみ影響します。しかし、私の2年目のiOSアプリケーション開発では、NSMutableStringを使用する必要はありませんでしたので、 "コピー"のケースは非常にまれです.AppleはNSStringプロパティのコピーを使用することを推奨しますが、配列、辞書、セットなどがありますが、同じ上書きケースが存在します(質問の下の私の最初のコメントを参照)。 1つのルールの欠如の種類... – Centurion

+1

@centurion try mogenerator。これはコードを生成されたクラスとそれのサブクラスに分けます。変更を上書きすることなくサブクラスを編集できます。 –

関連する問題