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?
't.noOfWheels' ist eigentlich schlechter. Punktnotation ist eine Scheußlichkeit, die bei der Geburt hätte erdrosselt werden sollen. Ansonsten gute Antwort. – JeremyP
Wenn Sie wie ich von einem C# .NET-Hintergrund kommen, dann ist die Punktnotation sehr hilfreich. –
@ 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. –