2009-06-10 11 views
1

Ich erhalte den Fehler/Warnung über einen Teil meines Codes mit der Aussage 'Nachrichten ohne eine übereinstimmende Methodensignatur wird' id 'zurückgenommen und akzeptiert' ... 'als Argumente.' Ich verstehe nicht Warum bekomme ich diesen Fehler, so dass ich nach etwas Hilfe suche, unten ist ein Link zu diesem Teil des Codes in der Implementierungsdatei.Methode Signatur Problem

http://fwdr.org/h8xf

ist hier der Fehler.

alt text http://snapplr.com/snap/qw1r

Thanks :)

Antwort

4

Diese Warnung bedeutet in der Regel Ihre Unterschrift verschieden sein können, oder Sie haben nicht einen Prototyp für Ihre Methode deklariert.

// Prototype 
-(void) foo:(float)bar; 

// Calling the function 
int blargh = 3; 
[myClass bar:blargh]; 

Sie sehen, wie die Signaturen nicht übereinstimmen:

Zum Beispiel haben Sie vielleicht so etwas getan? Normalerweise ist dies das Problem, wenn ich die Warnung bekomme. Obwohl Sie es vielleicht versäumt haben, es überhaupt zu prototypieren, was zu dem gleichen Problem führt. Objective-c akzeptiert alle Nachrichten, die Sie an ein Objekt übergeben, auch wenn es technisch nicht von Ihnen angegeben wurde.

+0

Ok, du hast Recht Die Prototyp ist anders, aber wenn ich den Prototyp ändere, wird es nicht mehr so ​​funktionieren, wie es wichtig ist. Sie können sich den Code (http://fwdr.org/h8xf) ansehen, um zu sehen, ob es eine andere Möglichkeit gibt, das Problem oder etwas anderes zu beheben, das ich ändern muss. – Joshua

+0

Vielleicht übergeben Sie nicht die richtigen Parameter an Ihre Funktion? Ich denke, ich werde es besser verstehen, sobald ich die Signatur für Ihre -ObjektArray-Methode für diese Klasse sehen kann. Möglicherweise benötigen Sie einen Parameter oder etwas, das Sie nicht übergeben haben. – Sam

+0

Ich bin mir nicht sicher, ob ich eine Signatur für meine -objectArray-Methode habe oder nicht. Kannst du mir zeigen, wie man eine Signatur hinzufügt? – Joshua

2

Aus Ihrem Code sieht es so aus, als ob Sie auf das objectArray Property von self zugreifen. Haben Sie das in Ihrer .h-Datei definiert?

@interface DragController : UIViewController 
{ 
    NSArray* objectArray; 
} 
@property (nonatomic, retain) NSArray* objectArray; 

Wenn die @property nicht vorhanden ist, dann Ihre Klasse reagiert nicht auf [self objectArray]. Sie benötigen die Eigenschaft nur, wenn Sie auf andere Objekte zugreifen müssen. Wenn Sie nur auf die Instanzvariable zugreifen möchten, können Sie einfach objectArray selbst verwenden, also ersetzen Sie [[self objectArray] indexOfObject... durch einfach [objectArray indexOfObject... und die Warnung sollte weggehen. Wenn objectArray wirklich eine Methode ist, sollte es so in Ihrer .h-Datei suchen, nach dem { instance variables } Abschnitt:

-(NSArray*)objectArray; 

Und in der .m-Datei:

-(NSArray*)objectArray 
{ 
    // return the array here 
} 
+0

Wenn ich es zu [objectArray objectAtIndex ändern, erhalte ich eine Fehlermeldung, die besagt, dass 'objectArray' nicht deklariert ist. Was soll ich jetzt tun, um das zu beheben? – Joshua

+0

Sie sollten Ihrem Objekt eine Instanzvariable namens objectArray geben, es klingt wie. – Chuck

+0

Sollte es ein IBOutlet sein? – Joshua

Verwandte Themen