1

オーバーライドされた getter メソッド名でブール型のプロパティを使用する際に問題があります。たとえば、私の NSManageObject サブクラスのヘッダーには次のものがあります。

@property (nonatomic, retain, getter=isActive) NSNumber * active;

私が持っている実装ファイルで:

@dynamic active;

Xcode は「isActive」メソッドを認識し、入力中にオートコンプリートし、コードはエラーなしでコンパイルされます。ただし、このコード:

MyObject *newObject = (MyObject *)[NSEntityDescription insertNewObjectForEntityForName:@"MyObject" inManagedObjectContext:[self context]];
NSNumber * tagActive = [newObject isActive];

クラシックでは失敗します:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MyObject isActive]: unrecognized selector sent to instance 0xb67e760'

カスタムゲッターを削除し、[myObject active] を使用してアクティブなプロパティにアクセスするだけで動作することをテストしました。NSManagedObject プロパティはこれをサポートしていませんか、それとも間違っていますか?

4

1 に答える 1

3

@dynamic は、メソッドのセッターとゲッターを実際に生成するのではなく、何かが生成されることをコンパイラーに伝えるだけです。したがって、NSManagedObject は標準の名前付きセッターとゲッターのみを生成すると思います

于 2013-11-06T16:49:26.220 に答える