iOS Unterklassen eine Benutzerdefinierte Klasse

Ich habe Probleme, packe meine Gedanken über die Vererbung. Ich bin suppsed erstellen einer dashboard-ähnlichen Oberfläche, die in einer app, und habe ich vielleicht 10 widgets/dashlets auf, dass die dashboard-Ansicht. Alle diese dashlets/widgets müssen im Grunde gleich Aussehen, mit einem Titel an der Spitze, Grenzen, Reihe von Tasten auf der Oberseite und ein Diagramm.
Angenommen, ich erstelle eine Unterklasse von UI-View namens "Dashlet' mit Eigenschaften und Steckdosen, und erstellen XIB-Datei mit dem richtigen layout und der angeschlossenen outlets etc.

Will ich jetzt schaffen, mehrere Unterklassen der "Dashlet' Ansicht, dass nur die Daten anders, und zeichnen verschiedene Diagramme. Mein Aktueller code sieht wie folgt aus:

Dashlet.h

@interface Dashlet : UIView{
@private
    UILabel *title;
    UIView *controls;
    UIView *graph;    
}
@property (weak, nonatomic) IBOutlet UILabel *title;
@property (weak, nonatomic) IBOutlet UIView *controls;
@property (weak, nonatomic) IBOutlet UIView *graph;

-(Dashlet*)initWithParams:(NSMutableDictionary *)params;
-(void)someDummyMethod;
@end

Und im Dashlet.m

- (id) init {
    self = [super init];
    //Basic empty init...
    return self;
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

    }
    return self;
}

-(id)initWithParams:(NSMutableDictionary *)params
{
    self = [super init];
    if (self) {
        self = [[[NSBundle mainBundle] loadNibNamed:@"Dashlet" owner:nil options:nil] lastObject];
        //some init code
    }
    return self;
}

Lassen Sie uns jetzt sagen, dass ich erstellen Sie eine Unterklasse namens CustomDashlet.h:

@interface CustomDashlet : Dashlet
@property (nonatomic, strong) NSString* test;
-(void)testMethod;
-(void)someDummyMethod;
@end

und CustomDashlet.m

-(id)init{
    return self;
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

    }
    return self;
}

-(id)initWithParams:(NSMutableDictionary *)parameters
{
   self = [super initWithParams:parameters];
   if (self) {
      //do some stuff 
   }
   return self;
}

Dieser, Art arbeitet, aber ich brauche, um überschreiben von Methoden deklariert, die in der Superklasse oder fügen Sie sogar einige von meinem eigenen. Immer wenn ich versuche etwas zu tun, wie dies in CustomDashlet.m

[self someDummyMethod] oder sogar [self testMethod] bekomme ich auch eine exception Fehlermeldung wie diese:

NSInvalidArgumentException', reason: '-[Dashlet testMethod]: unrecognized selector sent to instance 

Bin ich noch dabei das richtig? Hab ich was verpasst? Soll ich diese Arbeit machen in irgendeiner anderen Art und Weise? Wenn jemand Vorschläge haben, bitte fühlen Sie sich frei, um Ihre Gedanken zu teilen, ich danke Ihnen für all die Hilfe.

Haben Sie konkrete Implementierungen von someDummyMethod und testMethod?
Wo ist die Umsetzung von [self someDummyMethod] und [selbst testMethod] Methoden?
Nicht doppelt, aber deine Frage wird hier beantwortet: stackoverflow.com/questions/19451744/...
Gut, die someDummyMehod ist implementiert in der Oberklasse, und wie es aussieht, obwohl, ich überschreiben in der Unterklasse eine Oberklasse Umsetzung-code aufgerufen wird. Test-Methode ist eine Methode, die ich nicht in der Oberklasse, nur in der Unterklasse, und jedesmal, wenn es aufgerufen wird, bekomme ich die exception, dass kein "testMethod' - Methode in Superklasse.
Die Ausnahme-Methode -[Dashlet testMethod]: unrecognized selector zeigt deutlich, dass self im [self testMethod] ist ein Dashlet, und nicht ein * CustomDashlet* als Sie erwarten. Sollten Sie noch eine kleine autarke Beispiel demonstriert das problem, insbesondere zeigen, wie das Objekt erstellt wird.

InformationsquelleAutor Slavenko Miljic | 2013-11-11

Schreibe einen Kommentar