2010-03-07 3 views
0

De la classe picViewController j'appelle la fonction imageCliked sur scrollViewController afin de déclencher la fonction loadPage mais cela fonctionne. Erreur de compilation:problème de fonction d'appel (iphone)

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

Quelqu'un peut-il aider?

@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 

Répondre

1

Vous avez une discordance entre les méthodes de classe et les méthodes d'instance. Les méthodes qui commencent par + appartiennent à la classe et celles commençant par - appartiennent à l'instance.

L'erreur spécifique que vous voyez ci-dessus se produit parce que vous essayez d'appeler une méthode d'instance (-loadPage) à partir d'une méthode de classe (+imageClicked), qui ne work-- pas « soi » à l'intérieur de imageClicked fait référence à la classe , c'est pourquoi ça échoue. Je pense que vous voulez réellement que ces deux méthodes soient des méthodes d'instance. Faites-les tous les deux avec le préfixe -.

Mais il semble que vous ayez besoin de revoir certaines notions de base dans les deux premiers chapitres de Apple's Objective-C documentation.

4

S'il s'agit d'un cours, veuillez le nommer en commençant par une majuscule.


[self loadPage:3]; 

Depuis self est une classe +imageCliked, la méthode loadPage: doit être une méthode de classe ainsi. Mais vous déclarez -loadPage: comme méthode d'instance . Les deux ne sont pas échangeables. Soit

  1. Faire +loadPage: une méthode de classe (changer le --+), ou
  2. Créer une instance temporaire de scrollViewController, à savoir [[[[self alloc] init] autorelease] loadPage:3]; ou
  3. Faire -imageCliked une méthode d'instance, et créer une instance dans -pressButton1: .