2009-11-16 4 views
2

Im en utilisant un modèle Core Data pour mon application iPhone. J'ai cherché un moyen d'instancier ou d'utiliser une entité en dehors du ManagedObjectContext. (Cela ne devrait pas être fait, je sais, je suis aussi plus à la recherche d'un moyen de ne pas le faire, mais en tirer les avantages de toute façon). Mon défi est que j'ai un point de vue où l'utilisateur peut rechercher "Personnes", tous les résultats de recherche sont analysés et placés dans un objet géré par personne puis affichés dans une liste. Si l'utilisateur clique sur une personne de la liste, alors et seulement alors j'aimerais que l'entité Personne soit conservée dans le magasin, mais cela m'oblige à supprimer tous les autres résultats afin qu'ils ne soient pas conservés avec celui désiré . Aussi, au meilleur de ma connaissance, si l'utilisateur décide de tout à fait l'application, le magasin est persisté, potentiellement avec tous les résultats de recherche en cours mélangés avec des données utilisateur réel!NSManagedObject pour une utilisation temporaire, comment basculer entre NSObject et NSManagedObject

Y a-t-il un moyen d'avoir un objet TempPerson NSObject que je pourrais utiliser pour la liste de recherche? Sans, cependant, moi devoir tirer manuellement les 45 attributs de l'objet de temp et les placer manuellement sur le managedObject!

Un peu comme: NSManagedObject aPersonCorrectlyReturnedFromTheStore = (NSManagedObject *) tempPersonOfJustTypeNSObject

J'ai vu un exemple de code d'Apple où ils construisent un magasin temporaire pour faciliter undo/redo et d'autres choses sur un objet qui n'a pas encore persisté . Ce que je ressens serait exagéré dans ma situation. J'ai juste besoin d'afficher les résultats de la recherche jusqu'à ce que l'utilisateur sélectionne une personne à persister.

L'espoir, il est clair que Im essayant de faire, se sentir comme mon vocabulaire de base de données ne sont pas tout à fait assez grand encore :)

Merci pour toutes suggestions.

+0

Je n'ai pas utilisé moi-même les données de base, mais vous ne pouviez pas conserver un contexte d'objet géré distinct pour les résultats de la recherche, et transférer/persister uniquement le résultat souhaité? – jtbandes

Répondre

4

Vous pouvez créer chaque objet de personne temporaire en tant que NSDictionary ou NSMutableDictionary. Vous pouvez ensuite créer un nouvel objet géré Person et utiliser le fait que les instances de NSManagedObject sont compatibles avec KVC et utiliser setValuesForKeysWithDictionary :.

3

Les nouveaux objets gérés qui sont insérés ne sont pas réellement conservés jusqu'à ce que vous envoyiez un message save: au contexte d'objet géré. Enregistrez-les dans une collection (ensemble ou tableau) - vous le faites probablement déjà puisque vous présentez les résultats de la recherche d'une manière ou d'une autre. Ensuite, supprimez-les (deleteObject:) tous à l'exception de celui (s) que l'utilisateur sélectionne.
Les objets gérés supprimés ne seront jamais stockés.

+0

Merci à vous deux pour les suggestions. J'ai pris le temps de lire le setValuesForKeysWithDictionary et de le mettre en œuvre, donc je vais y aller cette fois-ci. J'aimerais pouvoir vous donner la réponse, car les deux réponses sont bonnes. Merci encore les gars :) – RickiG

+0

Je préfère aussi la réponse de Benno. – gerry3

Questions connexes