2010-11-27 17 views
0

Je travaille sur une application de base de données qui a beaucoup de différents types d'entités. Il y a une entité pour Property, une entité pour Apartment, une entité pour Tenant, et d'autres que je voudrais pouvoir utiliser l'appareil photo/photothèque de l'iPhone pour joindre des images.générique de base de données de classe parent « connectable »

J'ai travaillé avec l'appareil photo dans les petits projets, mais ce que je voudrais faire cette fois-ci est d'environ écrire un code « connectable » générique et ont chacune de ces entités (Property, Apartment et Tenant) Hériter de la classe Attachable pour avoir tout le code nécessaire hors de la boîte. Je pense que cela évitera la duplication de code et ressemblera à the excellent Ruby/Rails Paperclip plugin. Avant de réinventer la roue, je voudrais savoir si quelque chose comme ça est déjà là-bas. Des idées?

Merci!

Répondre

1

Vous ne voulez pas mettre de code qui contrôle la caméra ou l'interface utilisateur dans les sous-classes d'objets gérés. Cela casserait le modèle de conception de Modal-View-Controller et rendrait l'application un enchevêtrement. Les sous-classes d'objets gérés ne devraient concerner que des données de modélisation.

Cependant, il n'y a aucune raison pour laquelle vous ne pouvez pas avoir une sous-classe d'objet géré pour gérer un fichier de données en dehors du stockage persistant de Core Data.

Dans ce cas, vous avez des options pour stocker une image de base de données. Vous pouvez simplement stocker l'objet UIImage directement dans un attribut transformable dans n'importe quelle entité. Cependant, rend le magasin persistant énorme et peut sévèrement ralentir les récupérations. La meilleure méthode consiste à stocker l'image en tant que fichier distinct dont le chemin d'accès est stocké dans un attribut de chaîne.

Je suggère de créer une entité Image et de personnaliser sa classe pour gérer le fichier. Utilisez une propriété transitoire pour représenter l'objet UIImage réel. Créez ensuite une classe parent abstraite pour la propriété, l'appartement et le locataire qui a une relation avec l'entité Image. La propriété, l'appartement et le locataire héritent tous de la relation image.

De cette façon, pour définir une image pour toute propriété, Appartement ou locataire, vous voudrais simplement utiliser:

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

L'objet Image de l'autre côté de la relation chargerait et retourner le UIImage.

Vous devez gérer cette façon en raison de la nécessité d'être la valeur clé conforme. Ainsi, chaque fois que vous définissez ou supprimez une image, les données de base mettent à jour le graphique d'objet pour refléter la modification.