Objective-C-Klasse init-Parameter
Ich bin derzeit beginnen einige Objective-C wieder. Das problem, das ich habe, ist die übergabe von Variablen auf die native init-Methode einer Instanz der Klasse.
Ich habe diese custom-init in meiner @ - Schnittstelle:
-(id)init
{
if(self = [super init]) {
level = 1;
NSLog(@"Debug response");
}
return ([NSObject init]); //return self;
}
Und hier ist meine App der main-Klasse:
#import "AppDelegate.h"
#import "PlayableCharacter.h"
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
//Insert code here to initialize your application
NSArray *params = [NSArray arrayWithObjects: @"Elf", nil];
PlayableCharacter *allendar = [[PlayableCharacter alloc] init:params];
}
@end
Kann mir jemand erklären, was ich falsch mache? Ich dachte, ein NSArray-Objekt würde passen in das Profil einer "id" C-Objekt. Gibt init-Parameter illegalen oder muss es getan werden in einer anderen Art und Weise?
Die Fehlermeldung heißt: "No visible @interface for 'PlayableCharacter' erklärt der Selektor 'init:'"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre
-init
Methode hat keine Parameter. Es ist äquivalent zu der folgenden C:Wenn Sie wollen nennen Sie es, wie
-init:
, dann würden Sie es erklären, wieDies ist jedoch sehr viel ein nicht-standard-Namen. Wenn Sie wirklich wollen, eine init-Methode mit einem einzigen
NSArray
, dann vielleicht nennen Sie es so etwas wieAber aus deinen Beispiel-code, den ich vermute, Sie brauchen nicht wirklich ein array ist, müssen Sie nur einen parameter. Also anstatt die Sie verwenden würden,
dann rufen Sie es als
void *foo(void *args, size_t count)
, würden Sie? Würde man nur verwenden, wenn Sie wirklich brauchen, um zu akzeptieren eine variable Anzahl von Werten. Ähnlich wie in obj-c, Sie können dieNSArray*
wenn Sie brauchen, um zu akzeptieren eine variable Anzahl von Werten, aber wenn Sie brauchen, um eine bestimmte kleine Menge der Werte, die Sie verwenden würden, separate Parameter.-initWithDictionary:
(unter einemNSDictionary*
) oder-initWithParams:
.Wenn Sie möchten, init mit dem Parameter erstellen Sie dann eine
init
Methode wie diese:Auch, Sie sollte einfach nur wieder
self
, nicht[NSObject init]