2013-09-29 37 views
1

我需要重寫description方法以返回對象的內部狀態(換句話說,將所有值轉儲爲單行文本)。如何覆蓋對象的描述方法並將其打印出來?

在我的模型(類)我有

Homework.h

#import <Foundation/Foundation.h> 

@interface Homework : NSObject 

@property (nonatomic, strong) NSString *className; 
@property (nonatomic, strong) NSString *assignmentTitle; 

@end 

Homework.m

-(NSString *)description 
{ 
return [NSString stringWithFormat:@" %@, %@", self.className, self.assignmentTitle]; 
} 

我在ViewController

@property (nonatomic, strong) Homework *homeworkAssignment; 

創建的對象一個nd我試圖這樣打印

NSLog(self.homeworkAssignment.description); 

但它似乎不起作用,輸出打印出一個逗號「,」。我在格式化NSLog錯了嗎?我是否正確覆蓋了該方法?這是我的第一個應用程序(除了「Hello World」)。

+1

「似乎沒有工作」 - 它是做什麼的? –

+0

輸出打印出一個逗號, – Mike

+1

然後,最有可能的'self.className'和'self.assignmentTitle'都包含空字符串。 – rmaddy

回答

0

關於description和日誌記錄的執行,代碼全部顯示正確。由於輸出只顯示一個逗號,這意味着你的兩個屬性都包含空字符串。如果它們是nil,則字符串格式會將它們顯示爲(null)

nil指針與對空字符串(@"")的引用之間存在差異。

+0

它現在可以工作,但是當我做NSLog時(self.homeworkAssignment.description),我得到了一個警告; 這就是說(格式字符串不是字符串文字:可能不安全)。你知道我怎麼能擺脫這個? – Mike

+0

將「NSLog」更改爲「Ticko」在答案中的方式。 – rmaddy

+0

完美的謝謝。 – Mike

1

你的代碼工作正常,你甚至可以只的NSLog這樣的:

NSLog(@"%@", self.homeworkAssignment); 

返回

2013-09-29 23:56:50.375 test[2769:a0b] (null), (null) 

嘗試你的類名和assignmentTitle分配值,所以它不會返回null :)

+0

閱讀問題 - 它不會返回'(null)'。 – rmaddy

+0

嗯,我複製/粘貼他的代碼,並嘗試一個新的新項目,這就是它返回給我的 – Ticko

+1

但它不是什麼OP得到。不同之處在於,你從來沒有爲這兩個屬性設置任何值(因此'(null)'輸出),而OP已經將它們設置爲空字符串(這就是爲什麼他只有一個逗號而沒有別的)。 – rmaddy

相關問題