2011-10-18 67 views
-2

這裏有什麼問題?描述方法中的錯誤

- (NSString *)description 
{ 
    return self.name;  
} 

編譯器給我一個錯誤「的類型的對象沒有找到屬性名......」

+1

你能編輯你的問題,並粘貼相應的類聲明? – 2011-10-18 11:04:18

+0

@Bavarious,我沒有描述類聲明 – jingo

+3

這是一個實例方法,這意味着你正在實現該方法作爲類的一部分,這意味着你需要一個類或(唉!)類別聲明。 – 2011-10-18 11:12:57

回答

1

好像你還沒有宣佈「名稱」作爲的NSString財產和/或沒有合成它。

---編輯----

請按照邁克爾的建議嘗試!在你的情況下,它應該是 -

- (NSString *)description 
{ 
    return NSStringFromClass([self class]); 
} 
+0

我以爲self.name應該返回類名稱。 – jingo

+2

@jingo:爲什麼要這樣做?類的名稱與實例的名稱不同。一個實例沒有名字,除非你給它一個,你可以通過聲明和實現一個'name'屬性來實現。即使你這樣做了,給每個實例提供它的類名也不是很有用。如果你想得到對象類的名字,請求它的類並將其傳遞給'NSStringFromClass'。 –

2

你想要班級名稱,呃?

然後更改您的代碼

-(NSString *)description 
{ 
    NSString *className = NSStringFromClass([myObject class]); 
    return(className); 
} 
3

由於-description是一個實例方法,self指向當前實例取其類是實現該方法。因此,self.name(相當於[self name])預計會使用名爲-name的實例方法,這可能是名爲name的聲明屬性的getter方法。例如:

@interface SomeClass : NSObject 
@property (copy) NSString *name; 
@end 

@implementation SomeClass 
@synthesize name; 
- (NSString *)description { 
    return self.name; 
} 
@end 

在另一方面,如果你想回到裏面-description對應的類名:

- (NSString *)description { 
    return NSStringFromClass([self class]); 
} 
0

要獲取類的名字,你需要覆蓋的描述方法。如果你真的在描述方法則需要類的名稱:

return [NSString stringWithCString:class_className([self class]); 

你需要

#import <objc/runtime.h> 

欲瞭解更多信息,請參閱Objective C Runtime Reference