[Squeak-ev] Sichern eines SketchMorphs

Bert Freudenberg bert at isg.cs.uni-magdeburg.de
Sam Nov 15 17:09:34 UTC 2003


Klaus Füller wrote:

> Bert Freudenberg schrieb:
> 
>> Klaus Füller wrote:
>>
>>> Ich habe einen SketchMorph (=Igel) gezeichnet, den ich per Methode 
>>> aus einer anderen Klasse (=IgelFenster) auf dem Bildschirm auftauchen 
>>> und herumlaufen lasse --- funktioniert wunderbar.
>>>
>>> Aber wenn ich das Projekt sichere und anschließend in ein anderes 
>>> Image lade, ist der SketchMorph nicht da.
>>>
>>> Ich habe den Igel in einer Klassenvariablen von IgelFenster, ich habe 
>>> den Igel in einer Variablen des Workspace, ich habe den Igel als 
>>> globale Variable --- nichts funktioniert.
>>>
>>> Ich habe beim Speichern des Projekts immer gesagt, ich will den 
>>> gesamten "changeSet" speichern, obwohl ich nicht genau weiß, was das 
>>> bedeutet.
>>
>>
>>
>> Das speichert den Smalltalk-Code des aktuellen Changeset (also das was 
>> man im Change Sorter sieht) mit ab - normalerweise werden nur die 
>> sichtbaren Objekte gesichert. Und das ist auch das Problem: Lass den 
>> Igel einfach auf dem Bildschirm, dann klappt das mit dem Abspeichern 
>> auch.
>>
> Das ist leider nur ein Teilerfolg.  Ich habe des Igel jetzt auf dem 
> Bildschirm. Aber die Klassenvariable igelMorph ist nil.
> 
> Wenn ich einen Inspektor des SketchMorph aufrufe und dort sage 
> 'IgelFenster igelMorph: self', dann habe ich den gewünschten Zustand 
> wieder hergestellt (diese Methode setzt das Klassenattribut).
> 
> Ich frage mich, ob das auch automatisch geht?  Wo ist diese 
> Klassenvariable gespeichert?

Gar nicht. Es wird alles was sichtbar ist gespeichert, plus optional der 
Quelltext. Mehr nicht.

Du bewegst dich da an der Grenze zwischen zwei Welten - der 
Smalltalk-Welt mit Browser, Quelltext, etc., und der E-Zeug-Welt, die 
Projekte, Skripting etc. bietet. Was du willst ist einfach nicht vorgesehen.

Klassenvariablen initialisiert man üblicherweise beim Laden der Klasse 
in der #initialize Methode (schau dich einfach im Image um). Da kann man 
z.B. Bilder aus einer Datei laden. Die ganz Harten speichern ein Bild 
auch schon mal als Quelltext ab (siehe z.B. MenuItemMorph class >> 
initialize).

-- 
    Bert