Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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;としておくだけで大丈夫です。

参考リンク

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした