2012-05-30 5 views
1

ClassA에 메서드를 만들고 ClassB.m으로 호출하려고합니다.Objective-C 및 다른 클래스의 메서드 호출 : 인식 할 수없는 선택자를 클래스로 보냄

@interface ClassA : NSObject <NSCoding> 
... 
+ (NSInteger) methodA:(CGPoint)touchPoint; 
... 
@end 

그리고 ClassA.m에 내가 methodA 선언 :

+ (NSInteger)methodA:(CGPoint)touchPoint 
{ 
// return an integer based on touchPoint's value 
} 

그리고 ClassB.m의를 :

#import "ClassA.h" 
... 
-(void)methodThatCallsMethodA 
    UITouch *touch = [touches anyObject]; 
    CGPoint touchPoint = [touch locationInView:self]; 
    NSInteger integerUsingClassA = [ClassA methodA:touchPoint]; 
    // do some stuff 
} 

나는 느낌이 문제가이 ClassA.h에서

나는이 있습니다 방법을 호출하는 방법에 거짓말 d 지금은 ClassA 인 개체가 잘못되었지만 확실하지 않습니다. 오류는 unrecognized selector sent to class ...입니다. 계속 ClassB.m 내에 methodA과 동일한 메서드를 만들면 아무런 문제없이 개체에서 methodThatCallsMethodA을 호출하는 것처럼 호출 할 수 있습니다.

#import "ClassA.h" 
@interface... 
@property(nonatomic, retain)ClassA *objectOfClassA; 
... 
@end 

을 그리고 ClassB.m 변경 :

~~~~~~~~~~~ 또한 ClassB.h에서 이것을 시도

#import "ClassA.h" 
@synthesize objectOfClassA; 
- (void)methodThatCallsMethodA 
{ 
    UITouch *touch = [touches anyObject]; 
    CGPoint touchPoint = [touch locationInView:self]; 
    if(!self.objectOfClassA) 
     self.objectOfClassA = [[ClassA alloc] init]; 
    NSInteger integerUsingClassA = [self.objectOfClassA methodA:touchPoint]; 
    NSLog(@"ClassA: %i", integerUsingClassA); 
} 

을하지만 지금은 있음을 경고하는 것 instance method -methodA not found.

+0

전체 오류 메시지를 정확하게 인용하면 도움이됩니다. –

+0

나는 applicationDidFinishLaunchingWithOptions : 메소드에 호출 코드를 넣고 코드를 시험해 보았다. – rdelmar

+0

** ** 오류는 Xcode가 이전 버전의 파일을 사용하고 있다는 오류입니다. 그것이 하루 일찍 추락했고 실제로 변경 사항을 저장하거나 구축하지는 않았지만 그것이 그것이라고 말했지만. 내가 돌아 왔을 때 이전 버전의 모든 변경 사항이 사라졌습니다. 이제 내가 게시 한 코드 (첫 번째 시도) 위의 작품. @HotLicks 팁 주셔서 감사합니다; 나는 여기에 새로운 질문과 질문에 얼마나 많이 포함 시킬지 확신하지 못합니다. – alsuhr

답변

1

첫 번째 부분 (ClassA+(NSInteger)에 의해 표시됨)에 ClassBClassA의 분류 메소드 호출 부에 맞는지. 두 번째 부분은 ClassAClassB (-(NSInteger)으로 표시된 ClassA에있는 인스턴스 메서드 부분을 호출하기에 적합합니다.

Xcode 4가 변경 사항을 저장하지 않고 이전 버전을 사용하여 빌드하는 중 오류가 발생했습니다.

관련 문제