2012-04-26 12 views
9

私は労働者階級の一つで定義されたクラスの参照を持っている:iPhone iOS Classオブジェクトと別のクラスオブジェクトを比較する方法は?

Class _objectClass; 

    if([self.objectClass isSubclassOfClass:[NSManagedObject class]]) 
     { 
      //does not get called 
     } 

どのように私は私が扱ってるClassの種類をチェックすることができますか?

更新:sorry autocompleteがisKindOfClass:was availableという私を表示していませんでした。それはクラスであれば、それはクラスまたはisMemberOfClass:として受信機を尋ねるサブクラス、ある場合

isKindOfClass:は、受信機に尋ねる:私は今

+2

あなたは '-isKindOfClass:'メソッドを探しているかもしれません:https://developer.apple。com/library/mac /#documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html –

+0

私の答えは分かりやすいように、objectClassとは何ですか?それは実際のクラスの名前ですか?クラスのインスタンス?セマンティクスでは、最初に大文字で名前を付け、小文字でイ​​ンスタンスを作成することをお勧めしません。したがって、MyClassはクラスであり、instanceOfMyClassはMyClassのインスタンスです。 – jmstone617

+0

クラス_objectClassは、RestKitがオブジェクトインスタンスをインスタンス化するために使用している何らかのクラスオブジェクト参照です。 –

答えて

27

は、あなたが興味を持っている2つの方法がありますことをテストしていますしかし、サブクラスではない。例えば、NSManagedObjectというサブクラスがobjectClassと呼ばれているとします。

if([self.objectClass isKindOfClass:[NSManagedObject class]]) { 
    // This will return YES 
} 
else if ([self.objectClass isMemberOfClass:[NSManagedObject class]]) { 
    // This will return NO 
} 

最初の文がYES返す(または真の、または1)オブジェクトクラスは、NSManagedObjectのサブクラスであるためです。 2番目のステートメントはNO(またはFALSEまたは0)を返します。サブクラスの場合はクラス自体ではないためです。

UPDATE:

if ([self.class isKindOfClass:self.class]) 

falseを返します:次のコード行はので、私はこの説明が間違っていると述べて以下のコメント、に光をもたらすために、この答えを更新したいです。これは正しいです、それはfalseを返します。しかし、この例は間違っています。 NSObjectから継承するすべてのクラスもNSObjectプロトコルに準拠しています。このプロトコル内には、classというメソッドがあります。このメソッドは「受信者のクラスのクラスオブジェクトを返します」。この場合、self.classは、自分自身のクラスオブジェクトを返します。しかし、isKindOfClass:の文書から -

は、受信機は、所与のクラスのインスタンス またはそのクラスから継承するクラスのインスタンスであるかどうかを示すブール値を返します。

インスタンスクラスのにではなく、クラス自体に送信されることを意図されているので、したがって、(クラスである)self.classためにこのメッセージを送信すると、falseを返します。

あなたは

if([self isKindOfClass:self.class]) 

に例を変更する場合は、YES(または真、または1)を取得します。

ここで私の答えは、self.objectClassがインスタンスというobjectClassへのアクセッサであると仮定します。確かに、それはクラスのインスタンスのひどい名前ですが、質問は "クラスのインスタンスに名前を付ける方法"ではありませんでした。

+0

上記の2つを組み合わせてもそれは成立しません。 isKindOfClassが必要です:[NSManagedObject class] && isMemberOfClass:[ObjectClass class]、self.objectClassはObjectClassというクラスのインスタンスであると仮定します。 – jmstone617

+1

猫の皮膚に複数の方法。その点については、プログラム1: – jmstone617

+0

説明が間違っています。たとえば、 '[self.class isKindOfClass:self.class]'はあなたが説明しているものと矛盾する 'NO'を返します。 'isKindOfClass'は、クラスそのものではなく、インスタンスのクラスをチェックするためのものです。 – tia

1

はい、[self.objectClass isSubclassOfClass:[NSManagedObject class]]は正しいです。 falseの場合、self.objectClassで表されるクラスはNSManagedObjectのサブクラスではありません。私はあなたの問題が何であるか、あるいはあなたが何を期待しているのか理解していません。

関連する問題