Ich habe eine dokumentenbasierte App erstellt, die Core Data verwendet. Ich habe zuerst die Mac-Version erstellt, und jetzt, da es richtig funktioniert, werde ich eine iOS-Version davon erstellen.Freigabe von Code zwischen NSDocument und UIDocument
Ich kann mir einfach nicht vorstellen, wie man die Wiederverwendung von Code zwischen den iOS/Mac-Versionen im Hinblick auf das Core-Datenbit maximiert, da sie nicht die gleichen Klassen verwenden.
Meine Dokumentklasse, die das Speichern behandelt, ist eine Unterklasse von NSPersistentDocument
. Meine Absicht ist, dass eine gut entworfene Modellklasse in beiden Umgebungen funktionieren sollte, vor allem, weil ich in Bezug auf Core-Daten nicht allzu viel Fantasie betreibe.
Jetzt, da NSPersistentDocument
nicht in iOS verfügbar ist, trete ich auf eine Wand. Ich habe versucht, dies zu umgehen, indem Sie #if TARGET_OS_MAC and TARGET_OS_IPHONE
verwenden und auf diese Weise eine Unterklasse von in der iOS-Version machen. Das wäre offensichtlich bequem gewesen, aber ich kann es anscheinend nicht so machen. Und es sieht wirklich ziemlich unordentlich aus, da es eine Menge anderer Sachen gibt, die ebenfalls konditioniert werden müssen.
Ich habe auch versucht, statt NSDocument
/UIDocument
oben auf die Klassen baut, hakt mich die Kerndaten der Umsetzung, aber es sieht auch ziemlich chaotisch, mich zu verlassen, es ist nicht der richtige Weg, das Denken zu gehen.
Die Frage:
Für mich scheint es wie eine gute Idee, die gleiche Dokumentenklasse zwischen dem iOS/Mac-Versionen wieder zu verwenden, aber vielleicht naiv mir zu sein.
Was ist der beste Weg, dies zu tun?
Sollte ich die Code-Freigabe vergessen und eine separate Dokumentklasse für die iOS-Version erstellen, die alle in der Mac-Version vorhandenen Methoden emuliert?
Ich kann nicht mit diesem spezifischen Szenario sprechen, aber es könnte hilfreich sein, den allgemeinen Fall zu betrachten: Sie haben zwei Klassen, die von verschiedenen Oberklassen erben müssen, aber Sie möchten Code zwischen ihnen teilen. Die übliche Antwort auf solche (in ObjC) ist die Zusammensetzung: setze den geteilten Code in eine andere Klasse und referenziere eine Instanz dieser Klasse von beiden. – rickster
Das scheint eine gute Idee zu sein. Bitte post ist eine Antwort, und ich werde es auswählen. Eine weitere Frage, es scheint, als ob ich in meinem zusammengesetzten Objekt 20-30 Methoden schreibe, die sie nur an die exakt gleiche Methode auf dem spezialisierten Empfänger weiterleitet. Gibt es einen schöneren Weg? – Frost