2010-11-27 9 views
0

Ich arbeite an einer Core Data App, die viele verschiedene Arten von Entitäten enthält. Es gibt eine Entität für Property, eine Entität für Apartment, eine Entität für Tenant und einige andere, die ich in der Lage sein möchte, die Kamera/Foto-Bibliothek des iPhone zum Anhängen von Bildern zu verwenden.Generic Core Data "Attachable" Elternklasse

Ich habe mit der Kamera, bevor sie in kleineren Projekten gearbeitet, aber was dieses Mal mag mich um tun, ist einen generischen „Steckbare“ Code schreiben, und jede dieser Entitäten (Property, Apartment und Tenant) vererben aus der Klasse, um alle notwendigen Code aus der Box zu haben.

Ich denke, dass dies Code-Duplizierung vermeiden und etwas wie the excellent Ruby/Rails Paperclip plugin sein wird.

Bevor ich das Rad neu erfinde, würde ich gerne wissen, ob so etwas schon da draußen ist. Irgendwelche Ideen?

Danke!

Antwort

1

Sie möchten keinen Code, der die Kamera oder die Benutzeroberfläche steuert, in die Unterklassen des verwalteten Objekts einfügen. Das würde das Design-Muster des Modal-View-Controllers sprengen und die App zu einem Knäuel werden lassen. Die Unterklassen des verwalteten Objekts sollten sich nur mit der Modellierung von Daten befassen.

Es gibt jedoch keinen Grund, warum eine verwaltete Objektunterklasse keine Datendatei außerhalb des persistenten Speichers von Core Data verwalten darf.

In diesem Fall müssen Sie Optionen zum Speichern eines Bildes mit Core Data haben. Sie können das UIImage-Objekt einfach direkt in einem transformierbaren Attribut in einer Entität speichern. Allerdings macht der persistente Speicher enorm und kann Abholungen erheblich verlangsamen. Die bessere Methode ist, das Bild als separate Datei zu speichern, deren Pfadname in einem String-Attribut gespeichert wird.

Ich schlage vor, eine Image Entität zu erstellen und ihre Klasse anzupassen, um die Datei zu verwalten. Verwenden Sie eine vorübergehende Eigenschaft, um das tatsächliche UIImage-Objekt darzustellen. Erstellen Sie anschließend eine abstrakte übergeordnete Klasse für Property, Apartment und Tenant, die eine Beziehung zur Entität Image aufweist. Eigentum, Wohnung und Mieter erben alle die image Beziehung.

diese Weise ein Bild für jede Immobilie, Wohnung zu setzen, oder Sie Mieter würden nur verwenden:

UIImage *displayImage=aProperty.image.imageObject; //object.relationship.attribute 

Das Image Objekt auf der anderen Seite der Beziehung würde laden und die UIImage zurückzukehren.

Sie müssen auf diese Weise damit umgehen, weil Schlüsselwert-konform sein muss. Auf diese Weise aktualisiert Core Data das Objektdiagramm zu jeder Zeit, wenn Sie ein Bild setzen oder entfernen.