2011-10-19 5 views
3

CoreData管理対象オブジェクトを作成するアプリケーションにコードがあります。このコードでは、私は、プロパティを設定するには、次の行を使用します。マネージオブジェクト内のスカラーを使用中にエラーが発生しました

theAuthor.authorID = 1; 

プロパティは、管理対象オブジェクトのヘッダ内にこのように宣言されています。

それが正常に動作のiOS 5では
@property (nonatomic) uint32_t authorID; 

が、私はiOS 4.3でデバッグすると、次のエラーが表示されます。

Property 'authorID' is a scalar type on class 'Author'. Cannot generate a setter method for it.

なぜこのエラーは4.3では発生しますが、5では発生しません。私はスカラープロパティを避けるべきですか?私はCからObj-Cに来たので、できるだけ最適化されていると感じるので、スカラーで作業する方が好きです。

NSIntegerまたはNSNumberを代わりに使用するようにgetterとsetterを実装したり、コードを変更する方が良いでしょうか?

+0

[こちらの投稿](http://stackoverflow.com/questions/1152025/objective-c-error-property-active-is-a-scalar-type-on-class-routine-cannot)が役立つかどうかを確認してください君は。 – EmptyStack

+0

@EmptyStackこれは私が考えた解決策ですが、それが最善の解決策ですか?また、なぜiOS4だけでこのエラーが発生していますか? – colincameron

+0

申し訳ありません。私はそれについて考えていない。だから私はここにリンクをコピーして貼り付けたのです;-) – EmptyStack

答えて

3

コアデータのスカラー属性の使用については、hereを参照してください。 (ところで、NSIntegerはスカラーです)。リスト3は、あなたが興味を持っている特定のものです。基本的には、独自のアクセサを記述する必要がありますが、難しくありません。

iOS5以降、コアデータにスカラープロパティを使用できます。これは、データモデルから管理オブジェクトサブクラスを生成するときに適切なボックスにチェックを入れることで実現できます。

+0

ありがとうございます。 1つの質問:この例ではCGFloatを使用していますが、NSIntegerについて言及しています。 float、int、uintなどではなく、これらを使用する方が良いでしょうか? – colincameron

+0

CGFloatとNSIntegerは、あなたがコンパイルしようとしているデバイスに依存して、特定のCの型にキャストされています(私は思う) - 私はその違いに精通していません。私は一般的にNSIntegerとCGFloatに固執していますが、私は通常非常に大きな数字を扱っていませんので、それは私のために違いがないと思います。 http://stackoverflow.com/questions/4445173/when-to-use-nsinteger-vs-intおよびhttp://stackoverflow.com/questions/1264924/whats-the-difference-between-using-cgfloat-andを参照してください。 -float – jrturton

+0

私は今参照してください。私はちょうどそれを読んで、すべてのiOSデバイスは定義上32ビットであるARMコアを使用しているので、それは本当に重要ですか?私はある時点でAppleがARMから64ビットアーキテクチャに移行し、コードが最適化されないと思う。 – colincameron

関連する問題