12 berichten aan het bekijken - 1 tot 12 (van in totaal 12)
  • Q:

    Bijdrager
    Cygne

    Eigen objecten…

    Hallo heren,

    Ik ben bezig om een eigen object aan te maken in Obj-C, maar wil niet erg lukken.

    Ik wil graag:
    – Een eigen klasse schrijven.
    – Met daarin eigen methodes.
    – Waar ik vervolgens in m’n hoofdklasse een object van kan maken.

    Heeft iemand een voorbeeld of tut die mij kan vertellen hoe ik dit moet doen, want ik kom er zelf niet
    meer uit en kan zelf niets vinden…

    Alvast bedankt.

    Cygne.


    Bijdrager
    bhaenraets

    Ik zeg: Stephen Kochan, “Programming in Objective-C”. Goed boek voor de beginnende programmeur.


    Bijdrager
    TGV

    Bijdrager
    Cygne

    Bedankt voor de informatie, heb er heel veel aan gehad…

    Ik zal even laten zien wat ik heb:

    /* Object.h */

    #import <Cocoa/Cocoa.h>
    #import <Foundation/NSObject.h>

    @interface Object : NSObject {
    int gaap;
    }

    – (Object*) testObject:(int)naam;
    – (void)setPositie:(int)positie;
    – (int)getPositie;

    @end

    /* Object.m */

    #import “Object.h”

    @implementation Object

    – (Object*) testObject:(int)naam {
    self = [super init];
    if (self) {
    [self setPositie:naam];
    }
    return self;
    }

    – (void)setPositie:(int)positie {
    gaap = positie;
    }

    – (int)getPositie {
    return gaap;
    }

    @end

    En dan doe ik in een methode van m’n hoofdklasse:
    Object *obj = [[Object alloc] setPositie:1];
    En daar hangt hij dan vervolgens op…
    Heeft iemand een idee hoe dat komt?


    Bijdrager
    TGV

    Volledig overbodig: perfect uitgewerkt antwoord hieronder.


    Bijdrager
    Reflex

    Er zitten een aantal nare fouten in je code. Ik zal je even de goede geven

    [code:1:88ab901dd7]
    #import <Cocoa/Cocoa.h>

    @interface MyClass : NSObject { // niet ‘object’ want het is geen object (instantie) maar een class…
    int gaap;
    }

    – (id)initWithPosition:(int)pos;
    – (void)setPosition:(int)pos;
    – (int)getPosition;

    @end

    #import "MyClass.h"

    @implementation MyClass

    – (id)initWithPosition:(int)pos {
    self = [super init];
    if( self ) {
    [self setPosition:pos];
    }

    return self;
    }

    – (void)setPosition:(int)pos {
    gaap = pos;
    }

    – (int)getPosition {
    return gaap;
    }

    instantieeren:

    MyClass * obj = [[MyClass alloc] initWithPosition:1];
    [/code:1:88ab901dd7]

    De verschillen zijn significant en de reden waarom je code hangt. Ik heb de mijne niet getest, maar behoudens tikfouten is hij correct.


    Bijdrager
    Cygne

    Oké ik heb m’n eigen fout ondekt. Ik had in Interface Builder een klasse aangemaakt bij classes en daar mee gaan werken, maar dan werkt het niet op een of andere manier… Maar ik heb nu nogsteeds een klein probleempje…

    Ik heb de code nu zo gemaakt:

    /* MyClass.h */

    #import <Cocoa/Cocoa.h>

    @interface MyClass : NSImage {
    NSString* naam;
    }

    – (id)initWithName:(NSString*)name;
    – (void)setName:(NSString*)name;
    – (NSString*)getName;

    @end

    /* MyClass.m */

    #import “MyClass.h”

    @implementation MyClass

    – (id)initWithName:(NSString*)name {

    self = [super init];
    if (self) {
    [self setName:name];
    }
    return self;
    }

    – (void)setName:(NSString*)name {
    naam = name;
    }

    – (NSString*)getName {
    return naam;
    }

    @end

    Ik heb nu NSObject vervangen door NSImage. Dit heb ik gedaan omdat ik een object wil maken van een plaatje waar ik zelf attributen aan kan koppelen.

    Als ik nu dit doe:
    obj = [MyClass imageNamed:@”plaatje.png”];
    i.p.v. dat ik hem met een naam initialiseer.
    Kan ik hem gewoon als een plaatje behandelen, kan hem op het scherm afdrukken enz, maar kan nu mijn methodes van MyClass niet meer gebruiken omdat hij dan gaat praten over dat NSImage deze methodes niet bevat…

    Hoe moet ik dat werkend krijgen?


    Bijdrager
    TGV

    Dan moet je iets doen als
    [code:1:7bc2de5f4a]MyClass* obj = [[MyClass alloc] …];[/code:1:7bc2de5f4a]
    Dan weet de compiler dat je niet alleen NSImage maar ook MyClass berichten naar obj kunt sturen. Echt, ik raad je aan een tutorial over Objective-C te lezen en door te werken. Anders loop je de hele tijd tegen dit soort probleempjes aan…


    Bijdrager
    Cygne

    Laat maar zitten, is al gelukt zonder tutorial… Als iemand even zegt: Goh Cygne kijk eens naar Categories of iets in die richting, heb ik een stuk meer aan, dan zeggen dat ik een tutorial moet volgen…

    Jij wel bedankt reflex…


    Bijdrager
    TGV

    Ik zal je nog eens helpen.


    Bijdrager
    bhaenraets

    Stank voor dank. Ik zou zeggen: Goh Cygne, zoek het de volgende keer maar lekker zelf uit.


    Bijdrager
    Reflex
    ”Cygne”

    Laat maar zitten, is al gelukt zonder tutorial… Als iemand even zegt: Goh Cygne kijk eens naar Categories of iets in die richting, heb ik een stuk meer aan, dan zeggen dat ik een tutorial moet volgen…

    Jij wel bedankt reflex…

    Waarom zou iemand je out of the blue richting het categories concept verwijzen? Ik ben erg hulpbereid, mits degene die ik help wel even de moeite neemt om te RTFM-en…

12 berichten aan het bekijken - 1 tot 12 (van in totaal 12)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.