2012-11-06 212 views
0

NSLog正在返回輸出'Null'而不是字符串,我預期這是一個私人實例變量等問題,但由於我不熟悉Object-面向對象編程,我不能確定原因。NSLog返回null而不是字符串

//The viewDidLoad method in MainGameDisplay.m: 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    Engine *engine = [[Engine alloc] init]; 
    [engine setPlayerName: viewController]; 
} 

字符串由UITextField進入,物業是

//ViewController.h 
@property (strong, nonatomic) IBOutlet UITextField *PlayerNameTextView; 

的方法工作正常,如果[engine setPlayerName: self]放置返回正確的字符串到ViewController,但是*PlayerNameTextView所在位置以外的任何地方都會導致此問題。

//Engine.m 
@implementation Engine 
{ 
    ViewController *firstPage; 
} 

NSString *Player; 

-(void) setPlayerName: (ViewController *) name 
{ 
    Player = [[name PlayerNameTextView] text]; 
    NSLog(@"%@", Player); 
} 
+0

有問題的NSLog在哪裏? –

+0

而'Player'是在實現中聲明的,這使得它成爲某種C全局或靜態的,我想。所以我不知道你希望如何在別處引用它。 –

+0

問題是NSLog(@「%@」,Player);返回null – PappaSmalls

回答

0

NSLog返回類型爲void,你可以看到in it's documentation。沒有理由期望對它的任何返回值,因爲它不返回任何東西。

+4

通過「return」,我認爲@Sina在說控制檯輸出是「'''」。 –

0

確保「名稱」已正確初始化。嘗試在NSLog之前放置一個assert(name!= nil)。或者更好的是,在NSLog中設置一個斷點並檢查變量。

另一個建議:爲什麼不製作方法 - (void)setPlayerName:(NSString *)name?這比傳遞指向視圖控制器的指針更直接,並且更易於調試。

+2

更好地確保「名稱」不是零。我們已經知道「玩家」是零,斷言(玩家!=零)不會添加任何信息。 –

+0

這不能是原因,因爲如果我在ViewController本身運行setPlayerName,程序完美運行。 – PappaSmalls

+0

@SinaYamani - 那是因爲在這種情況下Player不是零。 –

相關問題