2009-07-19 9 views
3

Ich versuche, Obelec-C für das iPhone zu bekommen. Meine App kompiliert und läuft bisher gut, aber ich bekomme eine Compiler-Warnung, die ich nicht loswerden kann.XCode-Compiler-Warnung: 'foo' antwortet möglicherweise nicht auf -bar

-Header für eine Klasse:

@interface PersonDetailViewController : UIViewController { 
    NSDictionary *person; 
} 
@property (retain) NSDictionary *person; 
@end 

Implementierung für diese Klasse (snipped): (auch snipped)

#import "PersonDetailViewController.h" 
@implementation PersonDetailViewController 
@synthesize person; 
@end 

ich eine Instanz von PersonDetailViewController in PersonListViewController Erstellung und Aufruf:

#import "PersonListViewController.h" 
#import "Person.h" 
#import "PersonDetailViewController.h" 

@implementation PersonListViewController 
- (IBAction)myMethod:(id)sender { 
    NSDictionary *person = [[Person alloc] initFromTestArray:[sender tag]]; 
    [personDetailViewController setPerson:person]; 
    [[personDetailViewController person] describe]; 
} 
@end 

Und ich bin dann informiert, dass:

warning: 'UIViewController' may not respond to '-setPerson' (Messages without a matching method signature will be assumed to return 'id' and accept '...' as arguments.) 
warning: 'UIViewController' may not respond to '-person' 

es reagiert eigentlich ganz gut, aber ich kann nicht herausfinden, wie meine Header so zu organisieren, dass der Compiler würde wissen, was reagieren ...

ich alle bin aus Google ... Hoffnung Ich habe genug Informationen gegeben und jemand kann helfen.

Dank ein Haufen!

Antwort

4

Anscheinend haben Sie personDetailViewController als UIViewController deklariert? Sie können den Controller explizit umwandeln:

[(PersonDetailViewController*)personDetailViewController setPerson:person]; 

Aber Junge das ist hässlich. Es wäre besser, einfach die personDetailViewController als PersonDetailViewController im PersonListViewController Header zu deklarieren. Ich hoffe, ich habe es richtig verstanden, ich bin ein bisschen benommen von all den langen Namen :)

+0

Aha! Ja. Ich habe personDetailViewController als generischen UIViewController geworfen, daher wusste der Compiler nicht, nach den synthetisierten Setter- und Getter-Methoden zu suchen! Was micmoos ersten Punkt angeht, war ich dumm und blind. Alles sieht jetzt viel sauberer aus und baut ohne Fehler! Danke vielmals! – sinissaar

2

Ich bin ein wenig verwirrt ... Warum würden Sie das tun:

NSDictionary *person = [[Person alloc] initFromTestArray:[sender tag]]; 

Ihre erklärte Person ein NSDictionary zu sein, aber eine Person-Klasse sind init'ing ... Sollte nicht es

Person *person = [[Person alloc] initFromTestArray:[sender tag]]; 

bearbeiten ich nicht die @property & synthesize bemerkt haben, so dass Sie richtig da waren, meine schlechten ... die Antwort akzeptieren ist, was Sie lo waren oking für!

+2

Ich stimme dem ersten Punkt zu, aber 'person' ist eine Eigenschaft, die er im Header deklariert und in der Implementierung synthetisiert. –

+0

Ahhhh guten Punkt. Ich habe vergessen @Synthesize ... Ich werde meinen Beitrag bearbeiten. – micmoo

Verwandte Themen