Oprettet man. d. 06. august 2012 kl. 09:01:00

andersweile
andersweile (15.373 point. Point ude: 3.032)

OOP - tilgå variabler fra et under-instance

Hej eksperter.

Jeg er ved at lave et program i Objective-C men er lidt usikker på noget fundamental OOP, der overordnet set ikke er et specifikt Objective-C problem.
Here goes:

Jeg starter med (i initialiseringen) at oprette en række instances af klassen "Brugere". De lægges i et array ved navn "brugere"
Hver instance af Brugere (der også har tilknyttet en XIB) har en medlemsfunktion, der hedder "Næste bruger" og som aktiveres vha. en knap på brugerfladen.

Her er udfordringen: Når man trykker på knappen, har jeg brug for at vide, hvor mange brugere der er oprettet for at kunne vise brugerinterfacet for næste bruger og har derfor behov for at kunne tilgå array'et for at kunne tælle på dens længde.

Hvordan gør jeg det?


For at illustrere, meget overordnet:
Klassen "AntalBrugereViewController" opretter brugerinstances og definitionen er som følger:


#import <UIKit/UIKit.h>
#import "BrugerViewController.h"

@interface AntalBrugereViewController : UIViewController {
    short int antalBrugere;
    short int aktuelBruger;
   
    BrugerViewController *bruger; // Klassen Bruger
    NSMutableArray *brugere // Et array, der indeholder alle objekter af Bruger, så vi kan ha' mange af dem
}

@property (nonatomic, retain) NSMutableArray *brugere; // Vi skal kunne nå denne fra andre steder
@property (nonatomic, retain) BrugerViewController *bruger;


- (IBAction)vaelgAntalBrugere:(id)sender; // Man angiver manuelt, hvor mange brugere der er


@end


Her klassen, der oprettes brugere ud fra:
#import <UIKit/UIKit.h>

@interface BrugerViewController : UIViewController {
    short int brugernummer; // Fra 3-6
    short int antalForekomster;
    BOOL foersteGang;
    UIViewController *view;
}

@property short int brugernummer;
@property short int antalForekomster;
@property IBOutlet UILabel *toptekst;
@property (nonatomic, retain) UIButton *visNaesteBruger;

- (IBAction)vaelgTilfaeldigeForekomster:(id)sender;
- (IBAction)visNaesteBruger:(id)sender;
- (void) manuelInitialisering;
- (void) visSpiller;

@end


Som det ses, er det action "visNaesteBruger", der skal tælle variablen "aktuelBruger" én op (og hvis enden er nået, starte ved første bruger igen).

Array'et "brugere" bliver synthesized og har dermed getters og setters, men altså: hvordan tilgås de fra de instances, der bliver oprettet?

Skrevet man. d. 06. august 2012 kl. 09:44:05| #1

Panen
Panen (3.560 point)
Jeg er ikke en haj til Objective-C, men jeg har lidt C# erfaring, og umiddelbart lyder det forkert at have en funktion til at vise næste bruger, på selve bruger-objektet?

Jeg tror du bør have et lag over dine brugerobjekter som blandt andet holder styr på mængden af brugere og som har funktioner til at vise næste osv.

Skrevet man. d. 06. august 2012 kl. 14:03:25| #2

andersweile
andersweile (15.373 point)
Hej Panen og tak for din kommentar.

Kan du uddybe det lidt? Vi har
AntalBrugereViewController (den kan vi kalde Brugere) og
BrugerViewController (den kan vi kalde Bruger)

Brugere er den, der som bekendt opretter instances af Bruger

Hvis jeg forstår dig korrekt, vil du ha' visNaesteBruger metoden op i Brugere? Det ville jeg i så fald også ha' gjort, men jeg står stadig med problematikken om at tilgå medlemsvariabler fra Brugere i Bruger-objekterne.

Men al kommunikation skal måske køre gennem en række getters og setters?

Og er vi enige om at man ikke importerer metoderne fra Brugere i Bruger, da Bruger-objekterne i forvejen er oprettet af Brugere? Eller har jeg misforstået noget?

Skrevet man. d. 06. august 2012 kl. 14:16:13| #3

Panen
Panen (3.560 point)
Brugere skal bare indeholde et array eller en liste over de oprettede Bruger-instanser. Derudover kan den indeholde nogle funktioner som foreksempel at navigere til næste bruger.

Bruger skal kun indeholde informationer om sig selv. Det kan være ID, Navn, Adresse, Mail, Telefon osv. De informationer kan du lave nogle Gettere og Settere på, så Brugere kan få fat i dem. Medminde de enkelte Bruger-instanser har relationer med hinanden.

Når du så på dit Brugere-lag opretter Bruger-instanser, smider du dem i et array eller en liste.
På den måde kan du iterere igennem listen af oprettede Bruger-instanser og hente data ud om dem fra deres Gettere og Settere :)

Skrevet tir. d. 07. august 2012 kl. 08:08:54| #4

andersweile
andersweile (15.373 point)
OK, fint. Det er også sådan, det er lavet.

Variablen NSMutableArray *brugere holder styr på objekterne og tilskrives i en løkke, lige så snart man har valgt antallet af brugere der skal oprettes.

Metoden, der vælger næste bruger, ville jeg umiddelbart placere i Brugere - for det er en fælles metode for alle Bruger-instances.
Imidlertid kan jeg vel ikke nå den metode fra mine instances, med mindre den er nedarvet?

Det er sådan, jeg har tænkt mig, det skal fungere:
http://www.imagevolume.com/diverse/brugerebruger.jpg

Til hver bruger oprettes samtidig et grafisk interface, som knappen (der kører metoden "visNaesteBrugerKnap") ligger på.

Men ved nærmere eftertanke... selve brugerinterfacet (som oprettes sammen med hver instance) bør vel flyttes til Brugere og så blot opdateres med de informationer, man "getter" fra sine instances?

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   


Seneste spørgsmål

facebook timeline på eget site

Oprettet den 14. maj 2013 kl. 20.44
deurell giver 200 point for svar | Giv et svar »

I IE 10 forsvinder logoet fra min hjemmeside

Oprettet den 8. maj 2013 kl. 21.10
cpccorp giver 60 point for svar | Giv et svar »

CSS menu virker Firefox men ikke i Chrome

Oprettet den 8. maj 2013 kl. 17.02
djsteiner giver 30 point for svar | Giv et svar »








Tips & Tricks fra PC World

Teaser billede

Fem smarte funktioner i din Mac som du sikkert ikke kender

Her har du fem muligheder for at tweake din Mac på en fed måde.


Anmeldelser fra PC World

Teaser billede

Test: Samsung Galaxy S4 er et hit - trods gøglertricks

Kan Samsung beholde førertrøjen i det store Android-race? Galaxy S4 er smækfyldt med innovative funktioner, men også med en del gøgl. Er det for meget? Få vores dom over Samsungs nye topmodel.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Ny opfindelse: Oplad din mobil på 20 sekunder

Måske er det snart slut med at lade mobilen op hver aften. Med ny opfindelse kan telefonen få fuld energi på sølle 20 sekunder.


Nyheder fra Computerworld

Teaser billede

Galleri: De 10 vildeste datacentre i verden

I en gammel kirke, i et oppusteligt telt, på nedlagte militæranlæg eller midt i ørkenen. Der er ingen grænser for, hvor man kan banke et datacenter op. Her er de 10 sejeste anlæg i verden. I...


IT Kurser
Samarbejdspartnere

Udgiver · © 2013 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger