2010-01-07 6 views
3

Je souhaite expédier des données statiques en lecture seule pour les utiliser dans mon modèle Core Data. Le problème est qu'il existe évidemment différents types de magasins persistants et je ne sais pas si le format de ces types est supposé être opaque ou si je suis supposé être capable de les construire à la main.Quelle est la bonne façon d'expédier des données statiques (en lecture seule) dans le magasin permanent de données de base?

En ce moment j'ai juste un plist et c'est très petit (peut-être 30 entrées au total). Dois-je simplement écrire du code pour importer le plist dans mon magasin de données lorsque l'application est installée pour la première fois, ou est-il possible d'expédier une version initiale construite manuellement du fichier de banque de données?

(j'utilise la valeur par défaut SQLite magasin persistant.)

Répondre

3

Je ne voudrais pas essayer de la main le construire, mais vous devriez certainement exécuter une importation et enregistrer un fichier final de base de données SQLite pour expédier avec votre application .

Je prévois d'écrire un petit utilitaire mac (en utilisant le même modèle de données) pour générer le fichier Core Data SQLite pour mon application iPhone (l'importation est en fait à partir d'un serveur web). Ensuite, je vais ajouter le fichier qui a été persisté par l'utilitaire dans le projet de mon application iPhone.

+0

Merci. Après avoir posté que j'ai remarqué que l'application "Recettes" (l'une des applications de code d'exemple de l'iPhone d'Apple qui est destiné à démontrer l'utilisation des données de base) est livré avec une base de données par défaut Recipes.sqlite. Si je peux compter sur des magasins persistants crée sur OS X pour être portable sur l'iPhone ou tout autre support que Core Data finit par accepter, cela semble être un bon moyen d'y aller, mais je n'ai pas pu trouver de documentation m'assurant qu'un tel chose est sûr/soutenu ou ce que Apple voudrait que vous fassiez .... – Nimrod

+1

Le format de magasin SQLite sur le Mac est identique à celui sur l'iPhone. Les ingénieurs d'Apple nous ont encouragés à aller et venir entre les deux, donc je suppose que cela continuera dans un avenir prévisible. Je crée une base de données Core Data en lecture seule dans une application Mac et l'envoie avec une application iPhone sans problème. Vous pouvez utiliser le modèle de données d'exemple exact pour les deux. Pour un véritable magasin en lecture seule (celui que vous conservez dans le regroupement d'applications), vous pouvez également définir NSReadOnlyPersistentStoreOption sur votre magasin permanent. –

1

Pour ajouter un peu à la réponse à ma question, je remarque que l'application exemple de code Recipes est livré avec un magasin de support de SQLite par défaut:

// If the expected store doesn't exist, copy the default store. 
if (![fileManager fileExistsAtPath:storePath]) { 
    NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"Recipes" ofType:@"sqlite"]; 
    if (defaultStorePath) { 
     [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL]; 
    } 
} 

Mais là encore, à une autre fin il est livré avec quelques-uns données statiques en lecture seule dans un fichier plist! (TemperatureData.plist) Alors allez comprendre ....

0

Peu de gens le savent, mais vous pouvez réellement utiliser les données de base sur OSX et utiliser ce fichier de stockage puis sur iOS. Donc écrire essentiellement du code qui utilise exactement le même schéma et les objets de votre modèle (ils devraient tous se compiler et fonctionner sous OSX).

développement OSX n'est pas vraiment difficile d'obtenir votre poignée, si vous connaissez iOS SDK :-)

HTH

Questions connexes