2010-11-30 16 views
3

Je construis une application iPad où j'ai besoin de créer dynamiquement une entité. J'ai déjà 3 entités que le programme utilise.
Pourriez-vous m'aider avec le code comment le faire?Comment créer une entité dynamiquement en Objective-C?

Je veux comprendre toute la structure selon ma compréhension Je dois créer un nouveau managedObjectModel, ajouter de nouvelles entités et le fusionner avec celui existant, est-ce correct?

Répondre

2

Bien qu'il soit possible de créer une nouvelle entité et un nouveau modèle à la volée en pratique, cela est extrêmement complexe. Si rien d'autre vous devez migrer des données persistantes existantes vers le nouveau modèle et un nouveau fichier de stockage persistant. Je recommande fortement de ne pas essayer ceci surtout si vous débutez avec Core Data.

Vous avez des options:

Tout d'abord, êtes-vous sûr que vous avez réellement besoin d'une nouvelle entité? Les personnes qui débutent avec les données de base confondent souvent les entités pour les objets gérés. Les entités sont des objets gérés comme les classes sont des instances. Les entités sont des abstractions utilisées pour créer le graphe d'objets. Ils ne contiennent pas de données. Les moments où vous avez besoin de nouvelles entités sont très, très rares. Deuxièmement, si vous avez besoin d'une sorte d'entité dynamique, il est généralement préférable de décomposer l'entité dynamique en plusieurs sous-entités fixes, puis d'utiliser des relations pour créer une entité virtuelle. Par exemple. Vous avez besoin d'une "entité" Personne dynamique afin de créer plusieurs entités dans le modèle dont chacune contient un attribut de la personne. Vous pourriez avoir une entité Field qui aurait un attribut fieldName, puis un attribut fieldValue. Ensuite, ayez une entité réelle Person qui n'a aucun attribut mais juste des relations avec les objets Field nécessaires. Vous pouvez ajouter tous les champs nécessaires à une personne, puis reconstituer un objet de personne virtuelle en déplaçant les relations vers ses champs.

Je doute cependant que vous ayez besoin de ce genre de flexibilité. Un tel besoin est très rare. Je voudrais prendre du recul et voir exactement quelles données dynamiques vous pensez que l'utilisateur pourrait avoir besoin d'entrer.

+0

+1 Je pense que vous avez raison de déduire que l'OP est confus entre le besoin d'ajouter un autre objet géré (commun) et la nécessité d'ajouter une autre entité (ridiculement rare). – h4xxr

+0

Merci TechZen. Puis-je avoir plus de détails sur la deuxième option. S'il vous plaît... –

2

C'est exact - vous créez un tableau d'objets NSEntityDescription, puis appelez setEntities: sur le nouveau modèle d'objet géré. Enfin, vous fusionnerez ce modèle avec votre modèle intégré. Mais notez que vous ne pouvez pas modifier un modèle une fois qu'il a été utilisé pour créer un contexte d'objet géré (ou utilisé pour le stockage). Vous devrez créer un nouveau stockage et un nouveau contexte après le changement de modèle.