2012-04-10 11 views
1

Ich bin ziemlich neu zu objective-c, und versuche einige Beispiele auf eigene Faust. Hier ist mein BeispielcodeObjective-C-Synthese führt zu Fehlern?

#import <objc/objc.h> 
#import <Foundation/Foundation.h> 


@interface Test:NSObject 
{ 
    int noOfWheels; 
    int total; 
} 

    @property int noOfWheels; 
    @property int total; 
    -(void) print; 
@end 

@implementation Test 
@synthesize noOfWheels, total; 
-(void) print 
{ 
    NSLog (@" noofWheels is %i, total %i ", noOfWheels, total); 
} 

@end 

int main (int argc, char ** argv) 
{ 
    Test *t = [Test alloc]; 
    t = [t init]; 
    [t setnoOfWheels: 10]; 
    [t settotal: 300]; 
    [t print]; 
} 

und es ohne Fehler kompiliert, aber wenn ich das Programm ausführen bekomme ich die folgende Fehlermeldung.

Uncaught exception NSInvalidArgumentException, reason: -[Test setnoOfWheels:]: unrecognized selector sent to instance 0x87aef48 

Was mache ich falsch in meinem Code?

Antwort

3

Standardmäßig wird der erste Buchstabe von iVar im Namen der Setter-Methode großgeschrieben. So wird richtig Anruf sein:

[t setNoOfWheels: 10]; 
3
[t setnoOfWheels: 10]; 

sollte

[t setNoOfWheels: 10]; 

oder noch besser, da Sie eine Eigenschaft sind deklarieren:

t.noOfWheels = 10; 
+0

't.noOfWheels' ist eigentlich schlechter. Punktnotation ist eine Scheußlichkeit, die bei der Geburt hätte erdrosselt werden sollen. Ansonsten gute Antwort. – JeremyP

+0

Wenn Sie wie ich von einem C# .NET-Hintergrund kommen, dann ist die Punktnotation sehr hilfreich. –

+1

@ JeremyP Punktnotation ist KEINE Abscheulichkeit, es räumt Code in Situationen auf, in denen es sonst schrecklich wäre. Nimm dieses Beispiel: '[[[[[CCDDirector sharedDirector] openGLView] layer] setMask: nil];', wird zu: 'CCDirector.sharedDirector.openGLView.layer.mask = nil;' Das ist viel prägnanter und hält sich an die Codierung Stil in C & C++, auf dem Obj-C basiert. Ich nehme an, Sie würden dasselbe über Subskribierung sagen, dass es auch ein Greuel ist? Lernen Sie zu schätzen, wie die Sprache gewachsen und eleganter geworden ist. –

Verwandte Themen