4

現在、オブジェクト(NSManagedObject)のプロパティが存在するかどうかを確認する問題に直面しています。

残念ながら、この方法

[[MyObject class] respondsToSelector:@selector(myProperty)];

常にNOを返します。

CoreDataによって生成されたプロパティが新しいスタイルのプロパティであるためだと思います

@property (nonatomic, strong) NSString *myProperty

では、この問題を解決する方法はありますか?

私は本当にあなたの提案のすべてに感謝します;)

前もって感謝します!アレックス

4

3 に答える 3

15

[[MyObject class] respondsToSelector:...]メタオブジェクトがそのセレクターに応答するかどうかを尋ねます。したがって、実際には、そのセレクターを持つクラス メソッドがあるかどうかを尋ねます。次の場合、コードは YES を返します。

+ (NSString *)myProperty;

インスタンスメソッドと同等のものがあるため、NO を返します。

- (NSString *)myProperty;

respondsToSelector:クラスのインスタンスを呼び出す必要があります。

通常instancesRespondToSelector:はメタクラス (so, [MyObject instancesRespondToSelector:...]) で直接使用できますが、Core Data はオブジェクトを作成するときにのみ関連するメソッドの実装を合成するため、それは初心者です。ただし、通常のNSEntityDescriptionルートを介してインスタンスを作成し、それをテストすることはできますrespondsToSelector:

それはすべてコア データであるため、別の方法として、辞書を介しNSManagedObjectModelて関連するものを に問い合わせ、エンティティの説明の辞書を調べることもできます。NSEntityDescriptionentitiesByNamepropertiesByName

于 2012-01-25T13:50:25.530 に答える
0

クラスファイルでプロパティを合成していますか?

@interface SomeClass : NSObject
{
    @property (nonatomic, strong) NSString *myProperty
}
@end


@implementation SomeClass

    @synthesize myProperty;

@end
于 2012-01-25T13:45:48.137 に答える