2010-05-01 9 views
4

J'ai un problème très compliqué que je voudrais partager avec vous et peut-être que quelqu'un peut y répondre pour moi. avant de commencer je dois dire que je suis très nouveau dans ce domaine. Donc, j'ai une application iPhone coredata (un peu comme l'application de recettes) qui utilise une base de données SQL pré-remplie. L'utilisateur peut ajouter/modifier ses propres données mais les données par défaut ne peuvent pas être supprimées. les données des utilisateurs sont toutes sauvegardées dans la même base de données sql.migrer/mettre à jour l'application de données de base sans effacer les données de l'utilisateur!

QUESTION: Que dois-je faire pour: - mettre à jour certains (pas tous) des données par défaut qui sont stockés dans la base de données SQL sans « toucher » les données de l'utilisateur? (le modèle restera le même - pas de nouvelles entités etc-) (si l'utilisateur désinstalle l'application, puis réinstallez la nouvelle version tout ira bien, mais je ne veux pas faire cela, évidemment).

Quelqu'un peut-il aider s'il vous plaît dans le niveau de codage?

+0

semble être un double de 2750614, a demandé il y a quelques minutes . –

+0

Je pense que ma question est plus récente d'une heure !!! LOL il est intéressant et encourageant que je ne sois pas le seul avec le même problème. – treasure

Répondre

0

Étant donné que vous avez entré les données par défaut, vous devez connaître les ID/clés de ces enregistrements. Tout ce dont vous avez besoin est un script de mise à jour qui changerait les données par défaut.

+0

J'ai réussi à mettre à jour sans problème mes données par défaut en remplaçant l'ancien sql par le nouveau mis à jour. Cependant, je perds toutes les données entrées par l'utilisateur. J'apprécierais une réponse/un tutoriel plus détaillé (si possible) pour me guider vers une solution. merci encore pour votre temps! – treasure

1

Les données de base prennent explicitement en charge le versionnement de modèle et offrent des fonctionnalités pour migrer vos données entre les versions. Cela devrait contenir les informations dont vous avez besoin. Link to Developer Docs for Migration

+0

merci pour la réponse rapide. Cependant, mon problème est légèrement différent et j'apprécierais un lien de tutoriel ou un code pour commencer. J'ai vu le lien que vous donnez le bus je dois dire que je suis un peu épais et ne pas le faire. merci d'avance pour toutes les informations que vous pouvez me donner ... – treasure

2

Pour soutenir l'ajout de nouvelles entités, etc. Par la suite, vous souhaitez utiliser la migration automatique et le versionnage léger qui est décrit ici:

http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmLightweight.html#//apple_ref/doc/uid/TP40008426-SW1

Fondamentalement, vous créez une nouvelle version de vos données modélisez l'élément de menu Design->Data Model dans Xcode, puis effectuez quelques modifications de code. Les données de base migreront automatiquement un ancien modèle vers le plus récent. Vous êtes limité dans les types de changements que vous pouvez faire. Vous pouvez ajouter de nouvelles entités et ajouter un attribut facultatif aux entités existantes ou des attributs obligatoires avec des valeurs par défaut définies. Une chose qui m'a attrapé, c'est que la façon dont vous chargez les données de base NSManagedObjectModel change lorsque vous souhaitez utiliser la gestion des versions et la migration. Sans migration, vous avez probablement ceci:

NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil]; 

Une fois que vous commencez à utiliser le versioning et la migration cela doit changer quelque chose comme ceci:

NSString *path = [[NSBundle bundleForClass:self.class] pathForResource:@"DataModelName" 
                   ofType:@"momd"]; 
NSURL *url = [NSURL fileURLWithPath:path]; 
NSManagedObjectModel *model = [[[NSManagedObjectModel alloc] initWithContentsOfURL:url] autorelease]; 
Questions connexes