2009-07-20 3 views
7

のためのgetterメソッドを生成できません:Objective-Cエラー:プロパティ 'active'は、クラス 'ルーチン'のスカラー型です。 iphoneシミュレータ(3.0 OS)での場合は、次の実行、私は上記のエラーを取得しています、それ

@interface Routine : NSManagedObject { 

} 

@property (nonatomic) BOOL active; 

@implementation Routine 
@dynamic active 
@end 

あなたが見ることができるように私はので、私はNSManagedObjectのサブクラス化していますコアデータを使用します。私のデータモデルでは、 "active"はBoolean型のオプション属性です。

私はここで間違っていますか?

ありがとうございます!

答えて

17

CDから出てくるものはすべてスケーラではなくオブジェクトです。あなたがしたい場合は、スカラーとしてそれに対処するための便利なアクセサを追加することができます

@interface Routine : NSManagedObject { 

} 

@property (nonatomic) NSNumber * active; 

@implementation Routine 
@dynamic active 
@end 

::だから、にあなたのコードをチェンジャー

- (BOOL) activeScalar { 
    return self.active.boolValue; 
} 

- (void) setActiveScalar:(BOOL)active_ { 
    self.active = [NSNumber numberWithBool:active_]; 
} 

最後に、あなたがいる場合における財産上のControlキーを押しながらクリックモデルエディタを使用すると、ペーストボードに適切な宣言と定義をコピーするオプションを含む膨大なコンテキストメニューが表示されるので、自分で記述する必要はありません。

+0

素晴らしいです。ありがとうございました! – higginbotham

+0

小さな間違い: 変更: - (void)setActiveScalar:(BOOL)active_ { self.active = [NSNumber numberWithBool:active_]; } – benvolioT

2

私は、ドキュメントがスカラーのやや異なる解決策を提供することを知りました。一般的に、オブジェクトの代わりにスカラーを使用するのはお勧めできませんが、そうする場合はhttp://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CoreData/Articles/cdNSAttributes.htmlがその方法を説明しています。 「primitiveName」と「setPrimitiveName」を使用して、スカラーをオブジェクトに入れる自動生成アクセサにアクセスします(例:NSNumber)。その後、スカラー@propertyを作成し、プリミティブを使用するプロパティ用のアクセサを作成します。

これは、フードの下でCoreDataが、永続的なストア内のスカラーとして属性を格納し、それをプリミティブとして公開するオブジェクトに変換するという点で高額に見えます。したがって、setNameを実装するときに、ドキュメントとサンプルコードを読み込むと、値がオブジェクトに配置され、setPrimitiveName自動実装でスカラーが再度抽出されます。 getまたはsetごとに前後に不必要な整列化のように見えます。