何が間違っていますか?説明方法の誤り
- (NSString *)description
{
return self.name;
}
コンパイラは私にエラー「型のオブジェクトに見つからないプロパティ名...」
何が間違っていますか?説明方法の誤り
- (NSString *)description
{
return self.name;
}
コンパイラは私にエラー「型のオブジェクトに見つからないプロパティ名...」
を与えるあなたがNSStringのプロパティとして「名前」を宣言していない、および/またはそれを合成していないようです。
--- EDIT ----
マイケルが示唆したようにしてみてください!あなたの場合、それはする必要があります -
- (NSString *)description
{
return NSStringFromClass([self class]);
}
私はself.nameがクラス名を返すべきだと思いました。 – jingo
@jingo:なぜそれを行う必要がありますか?クラスの名前は、インスタンスの名前と同じではありません。インスタンスには名前を付けません。名前を指定しない場合は、 'name'プロパティを宣言して実装します。たとえあなたがしても、すべてのインスタンスにそのクラスの名前を付けることはあまり有用ではありません。オブジェクトのクラスの名前が必要な場合は、そのクラスを尋ねて、それを 'NSStringFromClass'に渡します。 –
あなたはクラス名が必要ですか?
-description
は、その方法を実施している方のクラスの現在のインスタンスのインスタンスメソッド、self
点であるのでそして
-(NSString *)description
{
NSString *className = NSStringFromClass([myObject class]);
return(className);
}
にコードを変更します。その結果、self.name
は[self name]
に相当し、-name
と呼ばれるインスタンスメソッド、おそらくname
と呼ばれる宣言されたプロパティのgetterメソッドが必要です。あなたは-description
の内側に対応するクラス名を返すようにしたい場合は一方
@interface SomeClass : NSObject
@property (copy) NSString *name;
@end
@implementation SomeClass
@synthesize name;
- (NSString *)description {
return self.name;
}
@end
、:たとえば
- (NSString *)description {
return NSStringFromClass([self class]);
}
は、クラスの名前を取得するには、ないオーバーライド記述方法が必要です。あなたは本当に、その後の記述方法でクラスの名前が必要な場合:
return [NSString stringWithCString:class_className([self class]);
は、あなたの質問を編集し、該当するクラス宣言を貼り付けでしご覧ください詳細については
する必要があります? –
@Bavarious、説明クラスの宣言がありません – jingo
これはインスタンスメソッドです。つまり、そのメソッドをクラスの一部として実装しているということです。つまり、クラス宣言または(ugh!)カテゴリ宣言が必要です。 –