LoginSignup
26
25

More than 5 years have passed since last update.

Core Dataでスカラー値をプリミティブ型のプロパティで扱う方法

Posted at

NSManagedObjectのサブクラスを作るとき、XcodeでジェネレートするとデフォルトではIntegerやBooleanの属性がNSNumberのプロパティになります。

@property (nonatomic, retain) NSNumber *number;  // Integer 32
@property (nonatomic, retain) NSNumber *yesOrNo; // Boolean

これはコレクションに値をそのまま放り込めるメリットはありますが、値を使いたいときにいちいちintegerValueboolValueを呼ぶ必要がありますし、セットするときは@()でくくる必要があって何かと面倒です。

特にBooleanの場合、

if (obj.yesOrNo) ...

とやってしまいがちで大変危険です。(この場合値が@(NO)でもif文判定は真になる)

このようなときはプリミティブ型のプロパティを利用する事ができます。やり方はプロパティの宣言を書き換えるだけです。

@property (nonatomic) int32_t number;
@property (nonatomic) BOOL yesOrNo;

Xcodeでジェネレートするときはファイル保存時のダイアログで「Use scalar properties for primitive data types」にチェックを入れれば上記のようなコードが生成されます。

Appleのドキュメントにはプリミティブ型を使いたい場合はアクセサメソッドを自分で実装する必要があると書かれていますが、iOS 5からは自動生成されるようです。したがって実装部は@dynamic number, yesOrNo;としておくだけで大丈夫です。

参考リンク

26
25
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
25