Breitis blöde-Fragen-Thread

  • Breitis blöde-Fragen-Thread

    Ich bin wie schon mal erwähnt, Anfänger. Ich bin fleissig dabei mir alles durchzulesen was ich finden kann, habe ab und zu aber noch einige Verständnisprobleme, bei denen, so hoffe ich, ihr mir etwas weiterhelfen könnt.

    Ich habe eine Klasse von NSObject abgeleitet, meine Charakter-Klasse, mit der ich nun ein großes Sammelsurium an Daten über Bindings in einem Array, der CharListe, ablegen möchte. Zur Eingabe und zum Auslesen, habe ich je eine eigene Schablone im IB erstellt, die gemeinsam auf die CharListe zugreifen. Bis jetzt habe ich in der Charakter-Klasse zig NSStrings und ein NSMutableDictionary, der Zugriff, also das Ein- und Auslesen funktioniert.

    Eine Überlegung war jetzt, meine bisherigen alleinstehenden Strings ebenfalls in ein Dict zu packen um weniger Accessoren, und somit weniger Code und Arbeit, in meiner Charakterklasse zu haben. Eine andere Überlegung ist, solche Dicts nun in eigene Klassen zu packen und in der Charakterklasse nur zusammenzuführen.

    Ich brauche nun noch ein NSMutableArray in meiner Charakterklasse, das zum Teil einige vorgegebene Daten beinhalten soll und zum anderen einige Daten aufnehmen soll die dann gemeinsam mit den anderen Daten als Charakter angelegt werden können. Auch hier, lieber eigene Klasse, oder in der Charakterklasse einbinden? Bei beiden fällen bin ich mir jedoch nicht sicher, wie ich zu diesem Array etwas hinzufügen kann (mit Bindings), so das es dann mit dem Charakter angelegt wird.

    Ich würde gerne mehrere Möglichkeiten des Speicherns implementieren, zum Einen soll das Array in dem die Charaktere angelegt werden als Liste gespeichert werden können, zum Anderen soll ein Charakter einzeln Ex- und in eine andere Liste Importiert werden können. Später soll zudem das Ganze so funktionieren, daß für jeden geöffneten Charakter ein Viewer zur Verfügung steht (habe mich mit den DBA aber noch nicht beschäftigt, von daher - später)
  • RE: Strategische Anfängerfragen

    Hm, entweder habe ich einfach nur schlecht geschlafen, oder ich verstehe Deine Beschreibungen/Fragen aus einem anderen Grund nicht. ?(

    Was soll die Klasse Charakter bezwecken? Kannst Du mal ein bischen mehr über die "Aufgabe" dieser Klasse beschreiben?

    In dem NSArray möchtest Du einfach nur alle Objekte der Klasse Charakter ablegen oder soll das Array noch einen weiteren Sinn/Zweck haben? Zeigst Du alle Objekte vielleicht in einem NSTableView an?
  • Die Klasse "Charakter" umfasst einfach nur Daten verschiedenster Art die ich dann zusammen , über die Klasse "CharCont", mit Hilfe von Bindings in dem Array "charList" anlege.

    "Charakter" hat haufenweise Strings und Dictionarys in denen die Daten festgehalten werden, Arrays sollen dazukommen.

    Meine Fragen:
    - ist es sinnvoll die Strings ebenfalls in einem Dictionary zu speichern um weniger Getter/Setter zu benötigen (weniger Code/Fehleruellen/Arbeit)
    - ist es sinnvoll für diese Dicts und Arrays eigene Klassen zu schreiben die dann in "Charakter" nur zusammengeführt werden?
    - wie kann ich möglichst einfach Daten diesem Array zufügen (das zu "Charakter" gehört") und dieses in einem Tableview aufzeigen lassen
    - (momentan nicht ganz so wichtig) wie kann ich bewerkstelligen das ich ein Objekt (?) der Charakterklasse Speichern und in eine andere charListe speichern kann und unterschiedliche Listen speichern/laden kann

    ich hoffe es ist jetzt verständlih?! :(
  • Original von Breiti
    - ist es sinnvoll die Strings ebenfalls in einem Dictionary zu speichern um weniger Getter/Setter zu benötigen (weniger Code/Fehleruellen/Arbeit)

    Genau im Gegenteil: Mit expliziten getter/setter Methoden bekommst Du wenigstens eine Warnung "'foo' may not respond to 'bar'", während das Dict auch falsch geschreibene Keys frisst. Zu "mehr Arbeit": Xcode hat dafür fertige Scripte im Scriptmenü.

    Original von Breiti
    - ist es sinnvoll für diese Dicts und Arrays eigene Klassen zu schreiben die dann in "Charakter" nur zusammengeführt werden?

    Kommt darauf an.

    Original von Breiti
    - wie kann ich möglichst einfach Daten diesem Array zufügen (das zu "Charakter" gehört") und dieses in einem Tableview aufzeigen lassen

    Für dieses Array einen Array Controller anlegen, und damit sollte das Problem erledigt sein

    Original von Breiti
    - (momentan nicht ganz so wichtig) wie kann ich bewerkstelligen das ich ein Objekt (?) der Charakterklasse Speichern und in eine andere charListe speichern kann und unterschiedliche Listen speichern/laden kann


    Ganz langsam:
    - "wie kann ich bewerkstelligen das ich ein Objekt (?) der Charakterklasse speichern"
    NSCoding Protocol, oder NSPropertyListSerialization
    - "und in eine andere charListe speichern kann"
    Huh? Meinst Du laden? Auch NSCoding Protocol
    - "und unterschiedliche Listen speichern/laden kann"
    Ööööh, auch so?

    ich hoffe es ist jetzt verständlih?! :(


    Naja, ging so. Bessere Fragen führen aber sicher zu besseren Antworten

    Gruss

    Alex
    The only thing that really worried me was the ether.
  • hmmmmm

    da ich so auf grund der namen wie charakter classe etc so meine vermutung hab was das werden soll:

    ich hatte mal ein ähnliches problem. und mein mal so aus erfahrung - grad so wenn man anfänger ist - zurück ans reißbrett ^_-

    ich weiß aus leidvoller erfahrung das man grad als anfänger gern sich einmal im dschungel der abhängigkeiten seiner eigenen classen verliert und dann nur noch wilden codewust schreibt und am ende damit endet alles nochmal völlig neu zu machen ^^;;

    deshalb meine rat: schau dir dein datenmodell nochmal genau an!
    am besten nicht am rechner sondern mit papier und bleistift ( oder meinetwegen einem uml tool *g*)

    was für daten muß deine charackter Klasse beinhalten?
    welche dieser daten erfordern vllt eigene Klassen bzw Container?
    was muß sie selbst damit anstellen können?

    was für Anzeigeoptionen benötigst du?

    was muß wie ineinander convertiert werden um was für zwecke genau zu erreichen?

    das führt in der Regel meist zu einem soliden Klassenkonzept und das erleichter dann den rest enorm...

    chartus
    snafu
    :() { :|: &};:
    sometimes i dream in hex
    Obey gravity! Because its a law!
  • Naja, ging so. Bessere Fragen führen aber sicher zu besseren Antworten

    Ich will's versuchen - schön wäre wenn mir gesagt wird worauf es denn ankommt, bin wie gesagt noch nicht firm in der Materie.

    Kommt darauf an

    ich rate mal: ich brauche diese arrays/dicts zumindest nicht in anderem Zusammenhang, oder alleinstehend, also in "Charakter" belassen?!

    Für dieses Array einen Array Controller anlegen, und damit sollte das Problem erledigt sein

    ohne eigene Controllerklasse? mit getter/setter in der Charakterklasse? das geht? 8o

    Ganz langsam:
    - "wie kann ich bewerkstelligen das ich ein Objekt (?) der Charakterklasse speichern"
    NSCoding Protocol, oder NSPropertyListSerialization
    - "und in eine andere charListe speichern kann"
    Huh? Meinst Du laden? Auch NSCoding Protocol
    - "und unterschiedliche Listen speichern/laden kann"
    Ööööh, auch so?

    Ganz langsam:
    - ich lege eine Liste mit mehreren Objekten der Charakterklasse an
    - diese liste soll inkl. der Objekte gespeichert werden können
    - aus der Liste soll jedes beliebige Objekt einzeln gespeichert werden können (und in die Liste geladen)

    heisst das, daß es ausreichen würde, wenn ich einmal die Klasse "Charakter" und einmal die charListe mit NSCoding vorbereite?

    (jetzt verständlich? :-()
  • da ich so auf grund der namen wie charakter classe etc so meine vermutung hab was das werden soll:

    Ein Verwalter/Generator/Tool für DSA

    ich weiß aus leidvoller erfahrung das man grad als anfänger gern sich einmal im dschungel der abhängigkeiten seiner eigenen classen verliert und dann nur noch wilden codewust schreibt und am ende damit endet alles nochmal völlig neu zu machen

    kein problem damit - hauptsache ich lerne was draus

    was für daten muß deine charackter Klasse beinhalten?
    welche dieser daten erfordern vllt eigene Klassen bzw Container?
    was muß sie selbst damit anstellen können?

    ich liste das jetzt nicht auf, wäre zu umfangreich, es ist aber eine Menge und teils reichen halt normale Strings nicht mehr aus, d.h. ich muß Dicts und Arrays mit einbauen. Prinzipiell bräuchten keine der Daten einen eigenen Container (in form einer eigenen Klasse, habe ich bisher auch noch nicht gemacht), da sie ja alle direkt an ein Objekt (Charakter) gebunden sind und allein keinen Sinn ergeben. Viel soll die Klasse mit den Daten nicht machen, allerhöchstens ein paar kleine Rechnungen für einige Werte die sich aus den anderen ergeben. Sie soll sie nur halten.

    was für Anzeigeoptionen benötigst du?

    eh, wie meinen?
  • Original von Breiti
    was für Anzeigeoptionen benötigst du?

    eh, wie meinen?


    ich meine damit was für daten must du wie dem user zugänglich machen.

    also zb brauch ich einen tableview oder einen textview kann ich meine daten direkt anzeigen oder müssen sie dazu verschieden organisiert sein.

    beötige ich mehrer fenster? vllt dynamische anzeigeformen etc pp

    werden sie gändert oder nur read-only angezeigt

    sprich wie komplex müssen deine Controller-Klassen werden bzw brauch ich eigene implementierungen von vllt Formater-Objekten

    letztlich mußt du zwei gedanken modelle im kopf (oder auf papier) haben
    1. wie muß meine datenmodell aussehen und was muß es alles können
    also zb sich serializieren (spiechern)
    vllt in mehreren varianten
    diverse interne calcuation und manipulationen ausführen
    daten organisation (sortieren etc)

    2. was will der user alles sehen, ändern, beeinflußen
    sortierte listen?
    daten editieren?
    convertieren?
    statistiken?
    generatoren?

    wie soll alles aufbereitet werden?
    diagrame tableviews icons etc pp




    chartus
    snafu
    :() { :|: &};:
    sometimes i dream in hex
    Obey gravity! Because its a law!
  • - ist es sinnvoll die Strings ebenfalls in einem Dictionary zu speichern um weniger Getter/Setter zu benötigen (weniger Code/Fehleruellen/Arbeit)

    macentwicklerwelt.net/index.ph…ding#KVC_und_NSDictionary

    - ist es sinnvoll für diese Dicts und Arrays eigene Klassen zu schreiben die dann in "Charakter" nur zusammengeführt werden?

    So gut wie nie.

    - wie kann ich möglichst einfach Daten diesem Array zufügen (das zu "Charakter" gehört") und dieses in einem Tableview aufzeigen lassen

    Hinzufügen:

    Quellcode

    1. [theArray addObject:anObject];

    Anzeigen lassen, wenn du mit Bindings arbeitest:

    Quellcode

    1. // Nix tun
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Original von below
    Original von Breiti
    - ist es sinnvoll die Strings ebenfalls in einem Dictionary zu speichern um weniger Getter/Setter zu benötigen (weniger Code/Fehleruellen/Arbeit)

    Genau im Gegenteil: Mit expliziten getter/setter Methoden bekommst Du wenigstens eine Warnung "'foo' may not respond to 'bar'", während das Dict auch falsch geschreibene Keys frisst. Zu "mehr Arbeit": Xcode hat dafür fertige Scripte im Scriptmenü.

    Hm, hat Xcode 2.1 etwa, wie z.B. Eclipse, die Möglichkeit automatisch getter/setter Methoden für Variablen einer Klasse zu generieren? Wo finden ich die Scripte im Scriptmenü, oder muss ich dafür etwas an den Einstellungen von Xcode verändern?
  • Original von MCDan
    Hm, hat Xcode 2.1 etwa, wie z.B. Eclipse, die Möglichkeit automatisch getter/setter Methoden für Variablen einer Klasse zu generieren? Wo finden ich die Scripte im Scriptmenü, oder muss ich dafür etwas an den Einstellungen von Xcode verändern?


    1) Leider nicht wie Eclipse

    2) Script Menü- > Code: Place Accessor Decls/Defs on Clipboard

    Gruss

    Alex
    The only thing that really worried me was the ether.
  • Original von Breiti
    Ein Verwalter/Generator/Tool für DSA

    Hm, kenne mich jetzt nicht speziell mit DSA, aber ein wenig mit Rollenspielen aus. Von daher würde ich doch ein Klassenmodel mit mehreren Klassen und einer gemeinsamen Basisklasse implementieren.

    Ein Charakter hat ja verschiedene Eigenschaften, die bei alle Charaktertypen vorhanden sind. Diese Eigenschaften würde ich in einer Basisklasse implementieren. Für jeden Charaktertyp, also z.B. Zauberer, Ritter, etc. würde ich dann eine abgeleitete Klasse implementieren, in welcher dann die speziellen Eigenschaften des jeweiligen Charaktertypes implementiert sind. Bei jeweils gleichen Eigenschaften für verschiedene Charaktertypen kannst Du dann "Zwischenklassen" implementieren. Somit hättest Du schon mal ein etwas aufgeräumtes Klassenmodel und musst nicht alle Charaktertypen in einer Klasse implementieren. Der Nachteil dieses Klassenmodels ist jedoch die etwas schwierige Handhabung im GUI, da je nach Auswahl des Charaktertyps eine andere Klasse instanziert werden muss. Keine Ahnung ob dies mit Bindings so einfach möglich ist.

    Alternativ könntest Du weiterhin nur eine Klasse Charakter verwenden in welcher die Basiseigenschaften aller Charaktertypen implementiert sind. Die speziellen Eigenschaften des jeweiligen Charaktertypes kannst Du dann in ein separates Dictionary oder in spezielle Klassen packen. Das Klassenmodel ist zwar nicht mehr so sauber wie oben, jedoch sollte damit die Handhabung im GUI einfacher sein.

    Wenn Du in Deinen Klassen die NSCoding Methoden:

    Quellcode

    1. - (id)initWithCoder:(NSCoder *)decoder
    2. - (void)encodeWithCoder:(NSCoder *)encoder
    implementierst, dann kannst Du damit diese Klassen schon einmal laden und speichern. Wenn Deine Objekte alle in einem NSArray oder NSMutableArray hängen, dann kannst Du somit auch schon das komplette Array laden und speichern.
  • Original von MCDan
    Hm, hat Xcode 2.1 etwa, wie z.B. Eclipse, die Möglichkeit automatisch getter/setter Methoden für Variablen einer Klasse zu generieren? Wo finden ich die Scripte im Scriptmenü, oder muss ich dafür etwas an den Einstellungen von Xcode verändern?


    Hi.

    Findest du alles im Script-Menü:

    Du hast z.B. im Header:

    Quellcode

    1. NSRect frameView;


    Markiere das und dann im Script-Menü auf Code und dann "Place Accessor Decls on Clipboard" und schon hast du für die .h-Datei das hier im Clipboard:

    Quellcode

    1. - (NSRect)frameView;
    2. - (void)setFrameView:(NSRect)value;


    So. Jetzt kannst du es noch mal markieren und "Place Accessor Defs on Clipboard" auswählen im Skript-Menü. Jetzt hast du für die .m das hier im Clipboard:

    Quellcode

    1. - (NSRect)frameView {
    2. return frameView;
    3. }
    4. - (void)setFrameView:(NSRect)value {
    5. if (frameView != value) {
    6. frameView = value;
    7. }
    8. }


    Tolle Funktion und erleichtert vieles. ;) Leider nicht ganz so "leicht" wie in Eclipse. Aber bis Apple an Eclipse ran kommt, dauert das wohl noch etwas. ;)

    edit: Mist. Zu spät. ;)
  • Original von below
    Original von MCDan
    Hm, hat Xcode 2.1 etwa, wie z.B. Eclipse, die Möglichkeit automatisch getter/setter Methoden für Variablen einer Klasse zu generieren? Wo finden ich die Scripte im Scriptmenü, oder muss ich dafür etwas an den Einstellungen von Xcode verändern?


    2) Script Menü- > Code: Place Accessor Decls/Defs on Clipboard

    Gibt's da auch eine Beschreibung, wie man die Scripte genau verwendet?

    Edit: Ups, die Lösung hat Nuke ja schon gepostet. :D
  • Für jeden Charaktertyp, also z.B. Zauberer, Ritter, etc

    leider bei DSA4 nicht mehr so einfach, da dies durch wenigstens 3 Eigenschaften, plus Modifikationen, bestimmt wird. Ich habe vor, was unterschiedlich vieles beinhalten kann (z.B. Vor/Nachteile, Talente, Zauber etc), in Arrays abzulegen und diese dann bei Bedarf für den einzelnen Char zu erweitern ... bin bis jetzt aber noch zu blöd ein Array in meiner Klasse um ein Element zu erweitern (ohne das ich für dieses eine neue klasse anlege) X(
  • Original von Breiti
    Für jeden Charaktertyp, also z.B. Zauberer, Ritter, etc

    leider bei DSA4 nicht mehr so einfach, da dies durch wenigstens 3 Eigenschaften, plus Modifikationen, bestimmt wird. Ich habe vor, was unterschiedlich vieles beinhalten kann (z.B. Vor/Nachteile, Talente, Zauber etc), in Arrays abzulegen und diese dann bei Bedarf für den einzelnen Char zu erweitern ... bin bis jetzt aber noch zu blöd ein Array in meiner Klasse um ein Element zu erweitern (ohne das ich für dieses eine neue klasse anlege) X(

    Hm, dann solltest Du vielleicht doch lieber Dictionaries anstelle von Arrays verwenden. Damit kannst Du dann einzelne Eigenschaften mit entsprechenden Keys ablegen. Wenn eine Eigenschaft noch verschiedene Modifikationen haben kann, dann verwende als Objekt für diesen Eigenschaftskey wieder ein Dictionary, welches dann die entsprechenden Modifikationen enthält.

    Habe gerade mal einen kurzen Blick in diverse Infos zu DSA4 geworfen und so könnte dies dann evtl. aussehen:
    Inhalt NSDictionary (Eigenschaften): key:"Talentgruppe" object:NSDictionary, ...
    Inhalt NSDictionary (Talentgruppe): key:"Handwerkliche Talente" object:NSDictionary, ...
    Inhalt NSDictionary (Handwerkliche Talente) : key:"Ackerbau" object:NSNumber, key:"Hauswirtschaft" object:NSNumber,...

    Der komplette "Baum" sollte sich dann mit einem NSOutlineView vernünftig anzeigen lassen.
  • so?:

    Talente
    -Handwerk
    --Ackerbau
    ---TaW=x, Unfähigkeit=x, Spezial=x, ...
    --Hauswirtschaft
    ---TaW=x, Unfähigkeit=x, Spezial=x, ...
    -Körperliche
    --Klettern
    ---TaW=x, Unfähigkeit=x, Spezial=x, ...

    wobei dann Talente, Handwerk und Ackerbau je eigene Dicts wären.

    Das würde meiner Ausgabe recht gut entsprechen, wenn ich das jetzt mit den Dicts noch richtig verstanden habe, bräuchte ich dann Elemente die nicht immer benötigt werden (z.B. Unfähigkeit u.ä.) nichtmal anlegen und könnte u.U. bei Abfragen einfach ein " if (spezial) " vorsetzen. Kann ich das denn aber über Bindings in einem TableView ausgeben (bzw. in mehreren TableViews, für jede Talentgruppe eines)?

    Ich wollte zudem noch für die Talente eine eigene Klasse anlegen, in der alle Talente und unveränderliche Werte (Proben, Schwierigkeit ...) aufgelistet sind. Könnte ich Werte aus dieser Klasse ebenfalls mit in diesem TableView anzeigen lassen?
  • hm vllt ist dein ganzes Problem ja nur das du NSArray und NSDictionary nach der initialisierung mit daten nciht mehr verändern kannst?

    also sprich wenn du diese container nachträglich noch mit neuen Objecten versorgen willst must du:

    NSMutableArray
    NSMutableDictionay
    NSMutableString

    verwenden...

    wars das was du suchst?
    snafu
    :() { :|: &};:
    sometimes i dream in hex
    Obey gravity! Because its a law!