• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Anfängerfrage: Cocoa + Bindings: Code wohin?

fuxx1.0

Golden Delicious
Registriert
13.03.08
Beiträge
6
Hallo,

ich bin gerade dabei, mir mal ein bisschen Cocoa und Bindings anzuschauen, bin allerdings totaler Anfänger, habe (noch!) kein Buch zur Hand und daher eine denke einfache, aber grundlegende Frage.

Ich habe bereits erfolgreich so ein Model erstellt und dann eine Oberfläche mit einem TableView, welches an Hand der Auswahl einer Kategorie in einem anderen TableView eine Liste von Einträgen anzeigt, die dieser Kategorie zugeordnet wurden. Wählt man nun einen Eintrag aus der Liste, so erscheint ein Drawer, welcher oben als Label z.B. den Namen des Eintrags (also das Attribut des Entitys) anzeigt und weitere Informationen, unter anderem sogar ein BILD! :)

Nun ist das alles gut und schön, aber stößt natürlich schnell auf seine Grenzen, denn viel mehr als Texte ändern und neue Einträge hinzufügen ist damit ja nicht drin. Meine nächste Aufgabe wäre nämlich folgendes:

Der Benutzer kann bereits ein Bild zu einem Eintrag auf das NSImageView ziehen und dieses Bild wird dann als BINARY-Attribut zum Entity per CoreData gespeichert. Das ging alles prima mit Bindings und ohne eine Zeile Code. (Bindings sind echt super!)

Ich möchte jetzt aber beim Droppen des BIlds auf das NSImageView NICHT NUR das Bild als Attribut speichern, sondern auch eine Thumbnail-Version davon. Sprich:

Benutzer droppt das BIld auf das ImageView:
1. Bild als Binary-Attribut "Image" CoreData-mäßig speichern (geht)
2. Thumbnail erstellen (also Bild skalieren)
3. Thumbnail ebenfalls als Binary-Attribut mit dem Namen "Thumbnail" im gleichen Entity speichern.

Dazu brauche ich ja wohl etwas Code und meine eigentliche Frage ist nun, wo ich den genau hinschreibe und wie ich dem InterfaceBuilder mitteile, dass er diesen Code ausführen soll. Also ich würde jetzt eine Klasse "makeThumbnail" oder so schreiben, mit einer Methode, die das Thumbnail erstellt und dann per CoreData speichert (wie geht das Speichern per Code?). Wie sage ich nun ImageBuilder, dass er beim Ändern des ImageViews diese Methode aufrufen soll?
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Das machst du (fast) nicht mit dem IB. Du hast da den falschen Ansatz. (Du kannst das Bild natürlich auch einfach kleiner darstellen, aber es wird dir eher ums Prinzip gehen.)

Das Bild ist eine Eigenschaft einer CD-Entität. Das Thumbnail ebenfalls! Zwar enthält diese Eigenschaft keine neue Information, stellt aber vorhandene Informationen anders dar. Siewird also aus den bestehenden Informationen errechnet. Man nennt dies eine Computed-Property.

Es gibt verschiedene Strategien, die ichteilweise anspreche. Das sprengt jetzt den Rahmen. Denkbar sind in deinem Falle:

- Value-Transformer, was die mwandlung "on the fly" vornimmt.
- Eigene Property für die Zieleigenschaft (Thumbnail), die nur über einen Getter verfügt
- Eigene Instanzvariable für die Zieleigenschaft, die über eigene Setter der Ausgangsproperty (Image) bedient werden.