2012-11-06 214 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不是零。 –

相关问题