2009-07-03 26 views
0

Ich bekomme diese zwei Nachrichten:Warnungen in iphone sdk

Warnung: ‚Mainview‘ reagieren nicht auf ‚-switchToNoGridView‘ Nachrichten ohne passende Methodensignatur wird angenommen, zurückzukehren ‚id‘ und akzeptieren ' ...‘als Argument

1. hier:

//GridView.m 
#import "GridView.h" 
#import "MainView.h" 

@implementation GridView 

-(IBAction)switchToNoGridView { 
    [mainView switchToNoGridView]; 
} 

@end 

2. hier:

Warnung: 'Mainview' reagiert nicht auf '-goBack' Meldungen ohne wird eine passende Methode Unterschrift angenommen werden, zurückzukehren ‚id‘ und akzeptieren ‚...‘ als Argumente

in dieser:

//NoGridView.m 
#import "NoGridView.h" 
#import "MainView.h" 

@implementation NoGridView 

-(IBAction)goBack { 
    [mainView goBack]; 
} 

@end 

wie diese Warnungen zu vermeiden?

Antwort

1

Haben Sie in der Klassenschnittstelle für MainViewswitchToNoGridView und goBack deklariert?

Diese Warnung bedeutet, dass die Methodensignaturen nicht in der Klasse der Instanz gefunden wurden, für die Sie die Methode aufrufen. Da der Nachrichtenversand in Objective-C zur Laufzeit erfolgt, ist dies erlaubt, es wird jedoch eine Warnung angezeigt.

0

Ich bin nicht ganz sicher von Ihrem Code, aber ich denke, dass Sie einen von zwei Fehlern begegnen. Entweder:

Sie haben nicht die Methoden erklärtswitchToNoGridView oder goBack in der Mainview Klassendeklaration. Für Xcode wissen, dass ein Objekt auf ein Verfahren reagiert, muss man seine Definition in der Klassenheaderdatei, wie folgt sind:

@interface MainView : ParentObject { 
    // instance variables 
} 
// properties 
- (void)switchToNoGridView; 
- (void)goBack; 
@end

Dies setzt voraus, Sie tatsächlich sie als (void), natürlich erklären wollen - sie können haben Rückgabewerte, aber da Sie nichts mit dem Ergebnis des Aufrufs in Ihrem Code tun, gehe ich davon aus, dass sie ungültig sind. Oder:

Sie wollten MainView die Klasse, nicht mainView das Objekt nennen. Da wir Ihre Property- oder Instanzvariablendefinitionen für GridView.h weder sehen noch die aktuellen Methodendeklarationen in MainView.h sehen können, ist es möglich, dass Sie eine statische Methode +(void)switchToNoGridView und +(void)goBack auf MainView deklariert haben, aber Sie sind Aufrufen einer Instanz mainView von MainView. Zum Beispiel:

@interface AClass : NSObject { } 
+ (void)doSomething; 
@end 

@implementation AClass 
+ (void)doSomething { 
    NSLog(@"Doing something"); 
} 
@end
#import "AClass.h" 
@interface AnotherClass : NSObject { 
    AClass *aClass; 
} 
@property(nonatomic,retain) AClass *aClass; 
- (void)doSomethingElse; 
@end 

@implementation AnotherClass 
- (void)doSomethingElse { 
    [aClass doSomething]; // This will break at runtime 
    [AClass doSomething]; // but this won't 
} 
@end 

Grundsätzlich ist es möglich, dass Sie verwirrt Klassenmethoden mit Objektmethoden haben. In beiden Fällen sollten Sie Ihre MainView-Headerdatei auf die entsprechenden Methodendefinitionen überprüfen.

+0

das ist mein Mainview: // Mainview #import "MainView.h" #import "GridView.h" #import „NoGridView.h“ @implementation Mainview - (void) {awakeFromNib \t [self addSubview: gridview]; \t [self addSubview: Infoview]; } - (void) {switchToNoGridView \t [gridview removeFromSuperview] ; \t [self addSubview: nogridView]; } - (void) {goBack \t [nogridView removeFromSuperview]; \t [self addSubview: gridview]; } @end –