2011-08-12 9 views

答えて

3

Core Dataは唯一NSNumbersを許可します。ただし、NSIntegerプロパティを使用するカスタムゲッターとセッターを記述することができます。 mogeneratorは自動的にあなたのためにそれを行う素晴らしいツールです:それはあなたのすべてのエンティティのネイティブプロパティでクラスを生成します。

+5

また、Xcodeの現在のバージョン(このコメントの4.3.2)では、NSManagedObjectサブクラスを生成するときにチェックボックスをオンにして、 "プリミティブデータ型にスカラープロパティを使用する"ことができます。合成されたアクセサがNSNumberと適切なスカラとの間で昇格/降格させるようにします。たとえば、 "Integer 32"は生成された.hファイルでint32_tとして宣言され、コード内のプロパティに単純に整数を割り当てることができます。 –

2

NSIntegerは、オブジェクトではなく長い整数の単なるtypedefです。

実際の実装:

#if __LP64__ || NS_BUILD_32_LIKE_64 
    typedef long NSInteger; 
    typedef unsigned long NSUInteger; 
#else 
    typedef int NSInteger; 
    typedef unsigned int NSUInteger; 
#endif 

NSNumberクラスは、プロパティリストおよびコアデータに格納することができるオブジェクトにプリミティブ型(intfloatなど)のカプセル化を可能にします。

例:

float pi = 3.1415; 
NSNumber *piNumber = [NSNumber numberWithFloat:pi]; 

あなたは、簡単にNSNumberオブジェクトに格納された値にアクセスし、および/または変換することができます:

int piAsInteger = [piNumber intValue]; 
+0

妥当な答えですが、この特定の質問ではありません。 – Abizern

+0

はい、そうです。 Core Dataは* objects *しか保持しないので、 'NSNumber'クラスが必要です。信頼性の低いサードパーティ製のユーティリティがないと、他の方法はありません。 –

+1

彼はNSNumberをスキップしてNSIntegerを使用できるかどうか尋ねました。コアデータにのみオブジェクトを格納できるため、答えは「いいえ」です。 NSNumberが値をどのようにカプセル化するかの説明は不必要です。そして、他の誰かが私に同意しない場合、彼らはあなたの答えをアップアップすることが自由です。 – Abizern

関連する問題