2010-03-07 79 views
0

從類picViewController我調用函數imageCliked上scrollViewController 爲了觸發函數loadPage,但它確實工作。編譯器錯誤:調用函數問題(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)中調用實例方法(+imageClicked),該方法不起作用 - imageClicked中的「self」引用整個類,所以這就是失敗的原因。

我的猜測是,你實際上希望這兩種方法都是實例方法。使它們的前綴爲-

但它聽起來像你可能需要複習一些基礎知識的Apple's Objective-C documentation第幾章。

4

如果是班級,請以大寫字母開頭。


[self loadPage:3]; 

由於self是在+imageCliked一個類,所述loadPage:方法必須是類方法爲好。但是您聲明-loadPage:實例方法。這兩個不可交換。無論是

  1. +loadPage:類方法(改變-+),或
  2. 創建的scrollViewController一個臨時的實例,即[[[[self alloc] init] autorelease] loadPage:3];,或
  3. -imageCliked一個實例方法,並在-pressButton1:創建一個實例。