Dynamische Objectnamen

  • Dynamische Objectnamen

    Hallo zusammen,

    nachdem ich viele Wochen hier im Forum gelesen habe, 3 Bücher vom "mito-Verlag" zu objc (nicht 100%tig) gelesen habe, hier eine Frage:

    Ich will für ein Projekt dynamisch Charaktäre entstehen lassen. Diese haben alle eine eindeutige "Personalnummer".
    Die Charaktäre sind von einander abhängig (Chef/Sklave mit eigenen Sklaven.. die den Chef töten (delloc) wollen *g*).

    Die Zuordnung, also die Hirachie, kann zwar über ein Array eines ManagementObjects organisiert werden, jedoch müssen die Namen aus denen die Speicherstelle des Objectes
    berechnet wird, ja einen eindeutigen Namen haben:

    Mensch *neuerMensch = [[Mensch alloc] init];

    Aber wie bekomme ich sowas hin:

    Mensch *neuerMensch2 = [[Mensch alloc] init];
    Mensch *neuerMensch3 = [[Mensch alloc] init];

    :
    :
    Mensch *neuerMensch999 = [[Mensch alloc] init];

    Wenn ich das zum Beispiel in einer Schleife machen will und dafür neue Namen für die Objekte generieren muss, stehe ich wie ein Ochs vorm Berg ;)

    Meine Ideen waren erst, das mit sqlite oder dictionarys zu lösen. Aber ich hab immer noch das Problem der Adressierung.

    Ich sehe mich auf jeden Fall noch als Anfänger. Also nicht zu doll drauf hauen, wenn das zu offensichtlich ist.
  • Du must einfach ein Array von Objecten machen. Also z.B.

    Quellcode

    1. NSMutableArray *meineMenschen = [[NSMutableArray alloc] init];
    2. for(int i=0;i<100;i++)
    3. {
    4. Mensch *neuerMensch=[[Mensch alloc] init];
    5. [meineMenschen insertObject:neuerMensch AtIndex:[meineMenschen count]];
    6. [neuerMensch release], neuerMensch=nil;
    7. }
    8. Ist nur so dahin getippt. Könnten also paar Syntaxfehler drin sein.
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Ändern von Objekten in Dictionary

    Danke schon mal. Das Beispiel hilft mir schon mal auf die Sprünge, wie ich sowas grundsätzlich angehen könnte.

    Wenn ich das richtig verstanden habe, dann muss ich dann die einzelnen Keys in einer weiteren Schleife zur Laufzeit temporär einem Object zuordnen um Werte im Object zu ändern/ein zu tragen, denn das hier:

    Quellcode

    1. [meineMenschen setObject:@"Neuer Wert" forKey:@"203040"]


    ändert ja nicht die Werte der gewollten Objecte, sondern nur den Namen des Objectes.

    Quellcode

    1. thisPerson = [[TeamManagement levelup] nextPerson];
    2. newPosition = [TeamManagement checkTurnaround];
    3. void CFDictionaryReplaceValue (
    4. CFMutableDictionaryRef meineMenschen, const void *thisPerson, const void *newPosition
    5. );

    Quelle: CFMutableDictionary Reference
    Wäre das der richtige Ansatz, oder bewege ich mich da in eine Sackgasse?
    Literatur:
    Objective-C 2.0 (mitp Verlag)
    Cocoa Kochbuch (mitp Verlag)
    Cocoa Design Paterns (mitp Verlag)
    IPhone & IPad Programmierung für Einsteiger (M&T Verlag)
    Spiele entwickeln für iPad, iPhone und iPod Touch (Thomas Lucka -Hanser Verlag)

    Hardware:
    IPhone 4 ios 4.2
    iMac i7 16 GB 27" 2TB + 2TB USB TimeMachine
    SVN auf Buffalo LinkStation
  • bunz schrieb:

    ändert ja nicht die Werte der gewollten Objecte, sondern nur den Namen des Objectes.

    Wie meinst du mit "ändert den Namen des Objektes"? Es handelt sich hierbei um einen Key, um an das Objekt zu kommen. Wenn du Werte eines bestimmen Objektes in deinem Dictionary ändern möchtest, holst du dir das Objekt mit dem Key und dann kannst du einfach deine Änderungen vornehmen.
  • Pascal Giessler schrieb:

    Wenn du Werte eines bestimmen Objektes in deinem Dictionary ändern möchtest, holst du dir das Objekt mit dem Key und dann kannst du einfach deine Änderungen vornehmen.
    OK - möglicher Weise hab ich den Syntax falsch verstanden.

    Hast Du eine Idee, wie ich das grob zusammen basteln könnte?

    Wäre toll, wenn Du mir ein kurzes Beispiel geben könntest - bin etwas orientierungslos ;(
    Literatur:
    Objective-C 2.0 (mitp Verlag)
    Cocoa Kochbuch (mitp Verlag)
    Cocoa Design Paterns (mitp Verlag)
    IPhone & IPad Programmierung für Einsteiger (M&T Verlag)
    Spiele entwickeln für iPad, iPhone und iPod Touch (Thomas Lucka -Hanser Verlag)

    Hardware:
    IPhone 4 ios 4.2
    iMac i7 16 GB 27" 2TB + 2TB USB TimeMachine
    SVN auf Buffalo LinkStation
  • Namen? Variablen?
    Ich glaube, du weißt gar nicht, was du eigentlich genau vor hast.
    Falls doch: was hast du eigentlich genau vor?

    Du musst doch nicht für jedes Objekt einen eigenen Zeiger vorhalten, das ist Blödsinn.
    Zumal der Name eines Zeigers nun echt gar nichts mit dem dahinter liegenden Objekt zu tun hat.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Was willer den

    was hast du eigentlich genau vor?
    Genau genommen portiere ich ein Gesellschaftsspiel als App.
    Momentan will ich 100 Spielkarten als Liste speichern, welche ein Kartendeck darstellen. Mit Random wird dann eben gezogen. Was auch funktioniert.

    Die Karten werden jeweils für andere schon gezogene Karten gezogen und müssen dafür anhand von Werten einen Test bestehen.
    Bei Erfolg hat die gezogene Karte eine Verbindung/Wechselwirkung mit der schon liegenden Karte. Und diese Verbindung/Wechselwirkung muss irgendwie während der Laufzeit nutzbar sein (Punktestand errechnen).

    Für mich ist jede Karte ein Objekt. Die Kartenobjekte müssen unbedingt entkoppelt sein, da diese austauschbar sein müssen. Auch die Menge der Karten ist variabel. Lediglich die statistischen Verhältnisse bleiben konstant.

    Für mich war die erste Idee eine sqlite aufzusetzen und über den Key dann via Random eine Karte zu ziehen.
    Dafür hatte ich im ersten Anlauf nur keine für mich brauchbare Howto gefunden, sondern nur die mehrfachen Hinweise, dass man sowas anders lösen sollte (Speichermanagement)

    Also hab ich mir über reine Objekte gedanken gemacht, bei denen ich weiß wie Release/Retain funktioniert.
    Seit Heute Nacht gehe ich davon aus, dass der "Associative Storage Design Pattern" das ist worüber ich nachdenken muss.

    Ich lerne den Stoff grade erst. Ich bin schier erschlagen von den drei Büchern (Signatur)

    Ich weiß schon was ich will, nur nicht was ich eigentlich wirklich brauche.
    Du musst doch nicht für jedes Objekt einen eigenen Zeiger vorhalten, das ist Blödsinn.

    Zumal der Name eines Zeigers nun echt gar nichts mit dem dahinter liegenden Objekt zu tun hat
    ... sondern mit der Speicheradresse. Danke für den Denkanstoß. Aber wie genau kann ich mit diesem Gedanken was anfangen.
    Hast Du evtl einen brauchbaren Link, oder ein kurzes Beispiel?

    Du weißt ja jetzt etwas besser was ich machen will.
    Literatur:
    Objective-C 2.0 (mitp Verlag)
    Cocoa Kochbuch (mitp Verlag)
    Cocoa Design Paterns (mitp Verlag)
    IPhone & IPad Programmierung für Einsteiger (M&T Verlag)
    Spiele entwickeln für iPad, iPhone und iPod Touch (Thomas Lucka -Hanser Verlag)

    Hardware:
    IPhone 4 ios 4.2
    iMac i7 16 GB 27" 2TB + 2TB USB TimeMachine
    SVN auf Buffalo LinkStation
  • Das Stichwort über das du dir Gedanken machen solltest heisst: Array, Liste, ... kurz Collection. Da kannst du nämlich Mengen von Objekten ablegen. Und dann brauchst du halt noch ein paar Variablen, die immer auf die gerade ausliegende Karte und die aktuell anzulegende Karte zeigen. Je nachdem was du wirklich genau machen willst.

    KG
  • Collections Objekte Values ändern

    Und dann brauchst du halt noch ein paar Variablen, die immer auf die
    gerade ausliegende Karte und die aktuell anzulegende Karte zeigen.
    Und wie soll ich dann die Werte in den Objekten ändern?
    (Das Spiel läßt zu das sich Kartenwerte ändern)

    Zeig mir doch mal ein kurzes konstruierte Beispiel. Mein Problem scheint ja irgendwo beim Syntax zu liegen.

    Aber danke schonmal für den Wink mit dem Zaunpfahl... ich lese mir nachher mal das Kapitel Collections genauer durch. Evtl komme ich ja dann drauf wie du das gemeint hast.
    Literatur:
    Objective-C 2.0 (mitp Verlag)
    Cocoa Kochbuch (mitp Verlag)
    Cocoa Design Paterns (mitp Verlag)
    IPhone & IPad Programmierung für Einsteiger (M&T Verlag)
    Spiele entwickeln für iPad, iPhone und iPod Touch (Thomas Lucka -Hanser Verlag)

    Hardware:
    IPhone 4 ios 4.2
    iMac i7 16 GB 27" 2TB + 2TB USB TimeMachine
    SVN auf Buffalo LinkStation
  • Ich weiss wie schwer es am Anfang ist. Auch ich habe mich mit den ersten Schritten schwer getan. Du brauchst auf jeden Fall eine Collection, in dieser kannst du dann deine Objekte ablegen. Stichwort NSArray oder NSDictionary. Es wäre natürlich auch über Core Data möglich, dein Anliegen zu realisieren. Dann wäre zum Beispiel ein Kartenobjekt ein ManagedObject deiner Entität Karte.
  • Ich hätte tatsächlich Bock darauf, ein kleines Beispielprojekt zu basteln.
    Leider muss ich erst etwas Anderes fertig bekommen. Stichwort: Deadline. ;)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • ohne gewähr einfach nur runtergetippt...

    Quellcode

    1. #import <Cocoa/Cocoa.h>
    2. int main(int argc, char *argv[])
    3. {
    4. NSAutoreleasePool * pool = [NSAutoreleasePool new];
    5. NSMutableSet * deck = [NSMutableSet set];
    6. NSString * card;
    7. int i;
    8. for( i = 1; i <= 100 ; i++ ) {
    9. card = [NSString stringWithFormat:@"card %d",i];
    10. [deck addObject:card];
    11. }
    12. card = nil;
    13. for( NSString * cardO in deck) {
    14. NSLog(@"card in set: %@",cardO);
    15. }
    16. [pool release];
    17. }
    Alles anzeigen
    snafu
    :() { :|: &};:
    sometimes i dream in hex
    Obey gravity! Because its a law!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von chartus ()

  • bunz schrieb:

    Genau genommen portiere ich ein Gesellschaftsspiel als App.
    Momentan will ich 100 Spielkarten als Liste speichern, welche ein Kartendeck darstellen. Mit Random wird dann eben gezogen. Was auch funktioniert.

    Die Karten werden jeweils für andere schon gezogene Karten gezogen und müssen dafür anhand von Werten einen Test bestehen.
    Bei Erfolg hat die gezogene Karte eine Verbindung/Wechselwirkung mit der schon liegenden Karte. Und diese Verbindung/Wechselwirkung muss irgendwie während der Laufzeit nutzbar sein (Punktestand errechnen).

    Für mich ist jede Karte ein Objekt. Die Kartenobjekte müssen unbedingt entkoppelt sein, da diese austauschbar sein müssen. Auch die Menge der Karten ist variabel. Lediglich die statistischen Verhältnisse bleiben konstant.

    Kleiner Tipp fürs "objektorientierte Denken": alles ist ein Objekt...

    * Karten sind Objekte und haben Eigenschaften die man prüfen und ggf. verändern kann
    * Kartendeck (= Sammlung von Karten) ist auch ein (Container-)Objekt und enthält null bis n Karten (entweder NSSet, NSArray, NSDictionary)
    * "schon gezogene Karten" ist ein anderer Kartenstapel, also noch ein weiteres Container-Objekt
    * das Spiel ist selbst ein Objekt und besteht aus mehreren Stapeln (zwischen denen über geeignete Methoden hin- und hergeschoben wird)
    * auch die "schon liegende Karte" ist eine Referenz des Spieleobjekts auf eine Karte (vielleicht indirekt das letzte/oberste Objekt auf dem Stapel der "offenen Karten")

    d.h. es geht nur darum in Deiner Prosa-Beschreibung zu erkennen, was alles als Objekt zu modellieren ist.

    -- hns
  • @chartus
    und @hns

    Danke - Danke - Danke.

    Das hat echt einen Knoten gelößt. Eigentlich sollte mir das mit den Objekten ja klar sein. Aber wenn man keinen Lernpartner hat, ist man schnell mal "verkrampft" im Kopf :)

    Hätte ich gar nicht mehr erwartet, dass ich noch so hilfreiche Antworten bekomme. :thumbsup:
    Literatur:
    Objective-C 2.0 (mitp Verlag)
    Cocoa Kochbuch (mitp Verlag)
    Cocoa Design Paterns (mitp Verlag)
    IPhone & IPad Programmierung für Einsteiger (M&T Verlag)
    Spiele entwickeln für iPad, iPhone und iPod Touch (Thomas Lucka -Hanser Verlag)

    Hardware:
    IPhone 4 ios 4.2
    iMac i7 16 GB 27" 2TB + 2TB USB TimeMachine
    SVN auf Buffalo LinkStation
  • Kartenstapel generieren

    @chartus:
    ohne gewähr einfach nur runtergetippt...
    für alle die das kopieren wollen. So klappts (basiert auf Chartus Vorarbeit):

    Quellcode

    1. NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    2. NSMutableSet *deck = [NSMutableSet set];
    3. NSString *card;
    4. int i;
    5. for (i = 1; i <= 100; i++ ) {
    6. card = [NSString stringWithFormat:@"Card %d",i];
    7. [deck addObject:card];
    8. }
    9. card = nil;
    10. NSEnumerator *enummerator = [deck objectEnumerator];
    11. for (id object = [enummerator nextObject];
    12. object != nil;
    13. object=[enummerator nextObject])
    14. {
    15. NSLog(@"card in set: %@",object);
    16. }
    17. [pool release];
    Alles anzeigen
    Literatur:
    Objective-C 2.0 (mitp Verlag)
    Cocoa Kochbuch (mitp Verlag)
    Cocoa Design Paterns (mitp Verlag)
    IPhone & IPad Programmierung für Einsteiger (M&T Verlag)
    Spiele entwickeln für iPad, iPhone und iPod Touch (Thomas Lucka -Hanser Verlag)

    Hardware:
    IPhone 4 ios 4.2
    iMac i7 16 GB 27" 2TB + 2TB USB TimeMachine
    SVN auf Buffalo LinkStation
  • ahja addObject sowas kommt wenn man aus dem kopf heraus schreibt :3 habs mal oben geändert... aber warum verwendest du dieses konstrukt der enumeration? machs doch per fast enumeration wie in meinem beispiel oder halt wenn du das mit NSEnumerator machen willst einfach in einer netten while-Schleife?

    das For-Konstrukt da sieht etwas abenteuerlich aus
    snafu
    :() { :|: &};:
    sometimes i dream in hex
    Obey gravity! Because its a law!