Bereiche
News
Rewind
Tipps & Berichte
Forum
Galerie
Journals
Events
Umfragen
Themenwoche
Kleinanzeigen
Interaktiv
Anmelden
Registrierung
Zu allen empfangenen Nachrichten
Suche...
Zur erweiterten Suche
Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum
>
Entwickler
>
DiscRecording und NSOutlineView/NSTreeController
DiscRecording und NSOutlineView/NSTreeController
Duck Dodgers
11.03.11
21:08
Hi,
ich habe eine Mac Anwendung geschrieben, die einige Dateien erzeugt. Die Struktur merke ich mir in einer "Browser-Liste" über NSOutlineView/NSTreeController. Jetzt möchte ich diese Dateien inkl. Ordnerstruktur über das DiscRecording Framework auf CD schreiben.
Ich habe mir schon das EnhancedDataBurn Beispiel angeschaut, aber das funktioniert nicht über Core Data! Abgesehen davon, läuft dieses Beispiel mittlerweile nicht mehr und wie üblich, ist es nicht gerade selbsterklärend. Ich kann jetzt natürlich die komplette Baumstruktur durchlaufen und mit ein DRTrack aufbauen, aber das dauert. Gibt es dafür irgendwie ein Lösung? Hat jemand eine Idee? Oder muss ich von Core Data abschied nehmen? Dann bräuchte ich aber jemanden, der mir wenigstens grob das Apple Beispiel erklärt
Hilfreich?
0
Kommentare
Duck Dodgers
15.03.11
08:32
Also das Beispiel ist doch nicht so schwierig, habe es mir mal gestern kurz anegschaut.
Aber ich frage mal anders: Wie kann ich ein Objekt, das keine encodewithcoder Method implementiert hat in ein NSTreeController packen? Bekomme immer die Meldung wenn ich ein DRFolder/DRFile hinzufüge:
"... encodeWithCoder:]: unrecognized selector sent to instance ..."
Hilfreich?
0
ExMacRabbitPro
15.03.11
11:47
Duck Dodgers
Aber ich frage mal anders: Wie kann ich ein Objekt, das keine encodewithcoder Method implementiert hat in ein NSTreeController packen?
z.b. durch Ableitung?
Oder durch eine neue Kategorie der entsprechenden Klasse?
Duck Dodgers
Bekomme immer die Meldung wenn ich ein DRFolder/DRFile hinzufüge:
"... encodeWithCoder:]: unrecognized selector sent to instance ..."
Abgesehen davon, die Meldung hat nichts mit dem NSTreeController zu tun. Dieser scheibt nämlich überhaupt nicht das NSCoding Protokoll vor für die Tree Objekte die er verwaltet.
Das Problem muss an Code liegen der von Dir kommt. Irgendwo versuchst Du deine Objekte zu persistenzieren (z.B. mit NSKeyedArchiver/Unarchiver) und darunter sind Objekte einer Klasse welche das NSCoding Protokoll nicht implementiert.
Hilfreich?
0
Duck Dodgers
16.03.11
10:00
Ja du hast recht, es hat nicht direkt mit dem NSTreeController zu tun, aber DRFile/DRFolder kann ich nicht in Core Data "ablegen" und es kommt diese Meldung. Ich habe leider keine Ahnung, wie ich nun so ein Objekt in Core Data ablege. DRFile/DRFolder haben halt kein NSCoding implementiert. Mein Problem ist, dass ich nicht richtig weiß, wie ich das implementiere. Wo weiß ich, aber wie?
Hilfreich?
0
ExMacRabbitPro
16.03.11
11:02
Duck Dodgers
Ich habe leider keine Ahnung, wie ich nun so ein Objekt in Core Data ablege. DRFile/DRFolder haben halt kein NSCoding implementiert. Mein Problem ist, dass ich nicht richtig weiß, wie ich das implementiere. Wo weiß ich, aber wie?
Hmm... eigentlich ist das Ganze hier
recht gut erklärt. Ansonsten findest Du im Web eine Menge Beispiele dazu.
Hilfreich?
0
Duck Dodgers
16.03.11
12:48
mhh vielleicht habe ich ja einfach nur einen Denkfehler:
ich implementiere initWithCoder: und encodeWithCoder: in DRFile/DRFolder (subclass) und dort nutze ich dann (un)archiver?
Hilfreich?
0
ExMacRabbitPro
16.03.11
16:40
Duck Dodgers
mhh vielleicht habe ich ja einfach nur einen Denkfehler:
ich implementiere initWithCoder: und encodeWithCoder: in DRFile/DRFolder (subclass) und dort nutze ich dann (un)archiver?
Hmm... also initWithCoder: und encodeWithCoder: bekommen ja als parameter den NSCoder der gerade verwendet wird um Daten gerade zu en- oder de-coden mit.
Alles was man tun muss ist in encodeWithCoder alle Felder einer Klasse an den coder zu übergeben und umgekehrt beim initWithCoder alle Feldwerte wieder aus dem Coder zu entnehmen und die Felder der entsprechenden Klasse wieder zu füllen.
So steht das Objekt quasi wieder auf.
Beipiel (initWithCoder):
- (id)initWithCoder:(NSCoder *)coder
{
self = [super initWithCoder:coder];
myString = [[coder decodeObjectForKey:@"myStringKey"] retain];
return self;
}
Beispiel (encode with coder):
- (void)encodeWithCoder:(NSCoder *)coder {
[super encodeWithCoder:coder];
[coder encodeObject:myString forKey:@"myStringKey"];
}
So wird im Beispiel oben der Wert von myString der Klasse encodiert und beim initWithCoder wieder decodiert und der myString wieder zugewiesen. Das ist eigentlich das grundlegende Konzept.
Hilfreich?
0
Duck Dodgers
16.03.11
20:52
@ExMacRabbitPro
Herzlichen Dank für die Erklärung
Ich probiere das mal aus ... melde mich dann nochmal.
Hilfreich?
0
Kommentieren
Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.
Mac Studio refurbished
Federighi: Warum es so lang dauerte, bis das iP...
Rosetta 2 ab macOS 28 nur noch eingeschränkt nu...
Kurz: Rendering des iPhone 17 Pro soll realisti...
iPhone 17: Dummy-Bilder von allen Modellen – sc...
Adobe beginnt mit Preiserhöhungen und ändert Bu...
Flugtickets unter iOS 26
John Gruber reagiert auf Apples Absage – "es st...