2010-03-07 6 views
0

클래스 picViewController에서 function loadPage를 실행하기 위해 scrollViewController 에서 imageCliked 함수를 호출하지만 작동하지 않습니다. 컴파일러 오류 :함수 호출 문제 (iphone)

"Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[scrollViewController loadpage:]: unrecognized selector sent to class 0x17198'" 

누구를 도울 수 있는가?

@interface scrollViewController : UIViewController <UIScrollViewDelegate> { 
} 
- (void)loadPage:(int)page; // loads a new picViewController 
+(void) imageCliked; 
@end 

#import "scrollViewController.h" 
#import "picViewController.h" 
#import "MLUtils.h" 

@implementation scrollViewController 

- (void)loadPage:(int)page { 
// I need to call this function from +(void) imageCliked 
} 
/* this function is called by picViewController pressButton1 */ 

+(void) imageCliked { 
NSLog(@"left"); 
[self loadPage:3];// does not work 
} 
@end 





#import "picViewController.h" 
#import "scrollViewController.h" 

@implementation picViewController 

- (void) pressButton1:(id)sender{ 
[scrollViewController imageCliked]; 

} 

@end 

답변

1

클래스 메소드와 인스턴스 메소드가 일치하지 않습니다. +으로 시작하는 메소드는 클래스에 속하며 -으로 시작하는 메소드는 인스턴스에 속합니다.

당신이 imageClicked의 내부에 "자기"work--하지 않는 클래스 메소드 (+imageClicked)에서 인스턴스 메서드 (-loadPage)를 호출하는 것을 시도하고 있기 때문에 위에서 볼 수있는 특정 오류가 발생하는 전체 클래스를 참조 , 그래서 그것은 실패합니다.

제 생각에는 실제로 이러한 두 가지 메소드가 인스턴스 메소드가되기를 바랍니다. 그들 앞에 접두사 -을 붙이십시오.

그러나 Apple's Objective-C documentation의 처음 몇 장에서 몇 가지 기본 사항을 검토해야 할 수도 있습니다.

4

클래스 인 경우 대문자로 시작하는 이름을 지정하십시오. self 이후

[self loadPage:3]; 


+imageCliked의 클래스의 loadPage: 방법뿐만 아니라 클래스 방법이어야한다. 하지만 -loadPage:인스턴스 메서드으로 선언하고 있습니다. 두 사람은 교환 할 수 없습니다. 어느
  1. +loadPage:에게 클래스 메소드합니다 (-+에 변경)를 확인하거나
  2. scrollViewController의 임시 예, 즉 [[[[self alloc] init] autorelease] loadPage:3];을 만들거나
  3. 는 인스턴스 메서드를 -imageCliked 확인하고 -pressButton1:의 인스턴스를 생성 .