IB-Element und copy

  • IB-Element und copy

    Hallo,

    ich bräuchte mal Eure Hilfe beim Lösen einer Denkblockade. Folgende Situation (wenn auch iOS, so doch auch für Cocoa interessant):

    Ich habe ein UIButton-Muster in einer xib angelegt. Muster deshalb, weil ich diesen Button zwei mal benötige, und zwar zwei unterschiedliche Male, denn ich differenziere ihn mit dem Tag. Er sieht zwar immer gleich aus, tut aber unterschiedliche Dinge. Um dies zu erreichen, habe ich den ordentlich verdrahteten Muster-UIButton genommen und mir mit copy eine Kopie gemacht - bzw. machen wollen.

    UIButton unterstützt leider nicht copyWithZone: und jetzt habe ich den Salat. Ich kann das natürlich alles händisch aufbauen, das finde ich aber blöd und unpraktisch. Zwei UIButtons in der xib sind auch blöd, weil die Erzeugung in einer Schleife passiert.

    Wie würdet Ihr das lösen?
  • fwtag schrieb:

    Ich habe ein UIButton-Muster in einer xib angelegt. Muster deshalb, weil ich diesen Button zwei mal benötige, und zwar zwei unterschiedliche Male, denn ich differenziere ihn mit dem Tag.

    Der Profi nennt das auch einen Prototyp. ;)

    fwtag schrieb:

    UIButton unterstützt leider nicht copyWithZone: und jetzt habe ich den Salat. Ich kann das natürlich alles händisch aufbauen, das finde ich aber blöd und unpraktisch. Zwei UIButtons in der xib sind auch blöd, weil die Erzeugung in einer Schleife passiert.

    Erstell' doch eine Kategorie UIButton(NSCopying), in der Du copyWithZone: implementierst. Das kann aber ein bisschen kniffelig werden, da m. W. UIButton ein Classbundle ist.

    Vielleicht ist es einfacher, als Prototyp ein einzelnes XIB zu nehmen. Alternativ kannst Du den Prototypbutton auch serialisieren und die Kopie durch Deserialisieren der Daten erzeugen.
    „Meine Komplikation hatte eine Komplikation.“
  • macmoonshine schrieb:

    Der Profi nennt das auch einen Prototyp. ;)
    Gnagnagna.

    macmoonshine schrieb:

    Erstell' doch eine Kategorie UIButton(NSCopying), in der Du copyWithZone: implementierst. Das kann aber ein bisschen kniffelig werden, da m. W. UIButton ein Classbundle ist.
    Hmm, das habe ich befürchtet. Dann kann ich den auch gleich von Hand bauen, denn bis ich den ganzen Kram gecoded habe, bin ich dreimal mit dem Von-Hand-Initialisieren fertig.

    macmoonshine schrieb:

    Alternativ kannst Du den Prototypbutton auch serialisieren und die Kopie durch Deserialisieren der Daten erzeugen.
    Das hatte ich beim google-n auch gefunden, fand das aber doch arg quer.
    Na gut, dann mach ich das halt v.H.
  • Amin Negm-Awad schrieb:

    Na ja, Kopieren macht das Original noch nicht zum Prototypen. Dazu ist etwas mehr erforderlich.

    So, was denn noch?

    Amin Negm-Awad schrieb:

    Sonst wäre ich ja nach 5 Minuten fertig.

    Ach, ich wusste gar nicht, dass sich das an der Implementierungsdauer entscheidet. Wie lange muss man denn für einen Prototypen programmieren?
    „Meine Komplikation hatte eine Komplikation.“
  • macmoonshine schrieb:

    Amin Negm-Awad schrieb:

    Na ja, Kopieren macht das Original noch nicht zum Prototypen. Dazu ist etwas mehr erforderlich.

    So, was denn noch?

    "Beim Klonen werden alle Eigenschaften (Attribute und Methoden) des Prototyp-Objektes kopiert; das neue Objekt kann mit neuen Eigenschaften versehen und die kopierten verändert werden."
    de.wikipedia.org/wiki/Prototypenbasierte_Programmierung
    Füge der Kopie nach dem -copy mal eine Attribut oder eine Methode hinzu. Und ändere mal nach einem -copy die Methode der Kopie.

    macmoonshine schrieb:

    Amin Negm-Awad schrieb:

    Sonst wäre ich ja nach 5 Minuten fertig.

    Ach, ich wusste gar nicht, dass sich das an der Implementierungsdauer entscheidet. Wie lange muss man denn für einen Prototypen programmieren?

    Es ging mir nicht um die Dauer der Implementierung, sondern um die Dauer des Vortrages.
    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"?
  • Amin Negm-Awad schrieb:

    "Beim Klonen werden alle Eigenschaften (Attribute und Methoden) des Prototyp-Objektes kopiert; das neue Objekt kann mit neuen Eigenschaften versehen und die kopierten verändert werden."
    de.wikipedia.org/wiki/Prototypenb…_Programmierung
    Füge der Kopie nach dem -copy mal eine Attribut oder eine Methode hinzu. Und ändere mal nach einem -copy die Methode der Kopie.

    Ich meinte aber das Entwurfsmuster und nicht Prototypenbasierte Programmierung.

    Amin Negm-Awad schrieb:

    Es ging mir nicht um die Dauer der Implementierung, sondern um die Dauer des Vortrages.

    Welcher Vortrag?

    EDIT: Ah, ich weiß es. Schade dass ich ihn nicht hören kann ;)
    „Meine Komplikation hatte eine Komplikation.“
  • Sorry, Kleine musste gefüttert werden. (Eine Ansicht, die sie allerdings nicht teilte …)

    Beim Erzeugungsmuster gibt es einen strukturellen Unterschied zwischen Prototyp und Kopie. Das iat bei -copy (hoffentlich) gerade nicht so. Es macht bei -copy keinen Unterschied, ob du von dem Prototypen oder von der Kopie weitere Instanzen erzeugst. Beim Erzeugungsmuster ist das etwas anderes.

    Ich würde daher auch bei einer sauberen Programmierung auf -isEqual: mit Prototyp und Kopie NO liefern. -copy sollte hier YES liefern.
    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"?