2010-02-15 4 views
0

얘들 아, AppController와 Robot의 두 클래스가 있습니다.Objective-C 'Robot'이 '-nothingToDo'에 응답하지 않을 수 있습니다.

AppController.h 
#import <Cocoa/Cocoa.h> 
#import "Robot.h" 

@interface AppController : NSObject { 

Robot *myRobot; 

} 
- (IBAction)initPort:(id)sender; 


AppController.m 

#import "AppController.h" 
@implementation AppController 


- (IBAction)initPort:(id)sender 
{ 
[myRobot nothingDo]; 
} 
@end 

Robot.h 

#import <Cocoa/Cocoa.h> 
@interface Robot : NSObject { 

} 
-(void)nothingToDo:(id)sender; 


Robot.m 
#import "Robot.h" 

@implementation Robot 

-(void)nothingToDo:(id)sender 
{ 
    NSLog(@"bla-bla-bla"); 
} 

나는 '로봇'을보고 실행하기 위해 노력하고있어 경우에 '-nothingToDo'응답하지 수는 - (무효) nothingToDo이 수행되지 않습니다. 뭐가 문제 야?

답변

3

Objective-C 방법의 콜론은 중요합니다. 시도해보십시오

[myRobot nothingToDo:sender]; 

대신에보십시오.

+0

그래, 도움이 :))))하지만, 전에 콜론에 대해 몰랐다. 감사합니다 – moldov

-1

AppController.m을 컴파일하는 경우 Robot.h에 나타나지 않으므로 컴파일러에서 개인 -nothingToDo 메서드를 인식하지 못합니다. 이것이 경고가 발행되는 이유입니다.

실제로이 방법은 존재하지 않으며 오직 -nothingToDo: (인수가 필요하다는 것을 의미하는 :에 유의하십시오). 이것이 메소드가 호출되지 않는 이유입니다.

+0

downvoting에 대한 인수? – mouviciel

+0

메서드가 헤더에 올바르게 선언 되었기 때문에 downvoted 였고 실제 문제는 메서드 이름을 잘못 입력하고 보낸 사람 매개 변수가 누락 된 경우 'nothignToDo :'대신 'nothingDo' 메서드를 보내는 것입니다. 경고가 true이면 로봇이 해당 메시지에 응답하지 않습니다. – Jasarien

+0

오타를 남겨 두어 쉽게 고칠 수 있습니다. 어쨌든'-nothingToDo'는 헤더 파일에 나타나지 않고 단지 -nothingToDo :' – mouviciel

0

myRobot 참조를 유효한 Robot 개체로 시작하는 것으로 시작하십시오.

2

메시지가 nothingDo이고 nothingToDo이 아니며 단지 오타 일 수도 있습니다.

또한 sender 매개 변수를 잊어 버렸습니다.

이 시도 :

- (IBAction)initPort:(id)sender 
{ 
    [myRobot nothingToDo:sender]; 
} 

이 작동합니다은 myRobot가 제대로 할당 제공 Robot 오브젝트를 초기화.

+0

그래, 도움이 :) :)))하지만, 전에 콜론에 대해 몰랐다. 감사 – moldov

관련 문제