2012-11-06 3 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이라는 위치 외부의 모든 위치에서이 문제가 발생합니다. 당신이 in it's documentation을 볼 수

//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입니다. 아무 것도 반환하지 않기 때문에 호출에 대한 반환 값을 기대할 이유가 없습니다.

+4

"return"으로, @Sina는 콘솔 출력이 "'"이라고 말하고 있다고 생각합니다. –

0

'이름'이 제대로 초기화되었는지 확인하십시오. assert (name! = nil)를 NSLog 바로 앞에 놓으십시오. 또는 더 나은 아직 NSLog에서 중단 점을 설정하고 변수를 검사하십시오.

또 다른 제안 : - (void) setPlayerName : (NSString *) name? 이는 뷰 컨트롤러에 대한 포인터를 전달하는 것보다 간단하며 디버그하기가 더 쉽습니다.

+2

"name"이 nil이 아닌지 확인하는 것이 좋습니다. 우리는 이미 "Player"가 nil이고 assert (Player! = nil)가 정보를 추가하지 않는다는 것을 알고 있습니다. –

+0

ViewController 자체에서 setPlayerName을 실행하면 프로그램이 완벽하게 작동하므로 이유가 될 수 없습니다. – PappaSmalls

+0

@SinaYamani -이 경우 Player가 0이 아니기 때문입니다. –