- Registriert
- 03.02.09
- Beiträge
- 87
Servus, hab mich im Forum und auf anderen Seiten bereits totgesucht aber scheinbar bin ich der einzige der die nicht schafft
Also es geht um die Chapter 18 Challenge im Hillegass Buch:
document-based application that allows the user to draw ovals in arbitrary locations und size.
Gezeichnet wird mit + (NSBezierPath *)bezierPathWithOvalInRectNSRect)rect;
Dazu kommt speichern, laden und undo.
Gut nach langem try & error hab ich alles bis auf laden und speichern hinbekommen.
Gezeichnet wird in einer CustomView die meiner eigenen Klasse "StretchView" entspricht. In dieser Klasse befindet sich ein NSMutableArray dass die NSBezierPaths hält.
Das sind die NSCoding Methoden des NSView Subviews, bezierPaths ist das NSMutableArray
In MyDocument halte ich mit einem ObjectController eine Referenz auf meine StretchView. Dort schreibe ich diese auch in die Datei bzw lade diese.
Errorhandling hab ich mal rausgelöscht wg Platzgründen
Resultat:
Sofern ich den Speicherdialog auswähle speichert er mir eine Datei ab. Lade ich diese jedoch wieder, so öffnet sich ein neues leeres Fenster.
Der decodierte Wert für das Array enthält nichts. -> Also dürfte das Problem beim abspeichern liegen.
Bin schon am verzweifeln, sitz seit 2 Tagen an der Aufgabe und hab es zigfach mit den Kapiteln davor abgeglichen. Kenn mich nichtmehr aus.
Falls ich ne wichtige Methode vergessen hab füg ich die natürlich gleich an.
Bitte bitte helft mir
mfg
Also es geht um die Chapter 18 Challenge im Hillegass Buch:
document-based application that allows the user to draw ovals in arbitrary locations und size.
Gezeichnet wird mit + (NSBezierPath *)bezierPathWithOvalInRectNSRect)rect;
Dazu kommt speichern, laden und undo.
Gut nach langem try & error hab ich alles bis auf laden und speichern hinbekommen.
Gezeichnet wird in einer CustomView die meiner eigenen Klasse "StretchView" entspricht. In dieser Klasse befindet sich ein NSMutableArray dass die NSBezierPaths hält.
Das sind die NSCoding Methoden des NSView Subviews, bezierPaths ist das NSMutableArray
Code:
#pragma mark NSCoding Methods
- (id)initWithCoder:(NSCoder *)coder
{
NSLog(@"initWithCoder:");
[super initWithCoder:coder];
bezierPaths = [[coder decodeObjectForKey:@"bezierPaths"] retain];
return self;
}
-(void)encodeWithCoder:(NSCoder *)coder
{
[super encodeWithCoder:coder];
[coder encodeObject:bezierPaths forKey:@"bezierPaths"];
}
In MyDocument halte ich mit einem ObjectController eine Referenz auf meine StretchView. Dort schreibe ich diese auch in die Datei bzw lade diese.
Errorhandling hab ich mal rausgelöscht wg Platzgründen
Code:
- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
{
return [NSKeyedArchiver archivedDataWithRootObject:stretchView];
}
- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError
{
NSLog(@"readFromData:");
stretchView = [NSKeyedUnarchiver unarchiveObjectWithData:data];
return YES;
}
Resultat:
Sofern ich den Speicherdialog auswähle speichert er mir eine Datei ab. Lade ich diese jedoch wieder, so öffnet sich ein neues leeres Fenster.
Der decodierte Wert für das Array enthält nichts. -> Also dürfte das Problem beim abspeichern liegen.
Bin schon am verzweifeln, sitz seit 2 Tagen an der Aufgabe und hab es zigfach mit den Kapiteln davor abgeglichen. Kenn mich nichtmehr aus.
Falls ich ne wichtige Methode vergessen hab füg ich die natürlich gleich an.
Bitte bitte helft mir
mfg