Je fais une application iPhone. Dans cette application, je veux juste avoir une base de données à utiliser comme une table levée pour les valeurs de mon application. La seule chose à faire était de me fournir les valeurs dont j'avais besoin en fonction de la requête du programme. Il ne fera aucun ajout ou délétion dans la base de données. Ma question était de savoir comment puis-je initialiser les données par défaut sur l'application à l'aide de CoreData. De sorte que lorsque le programme commence, il y avait déjà toutes les valeurs nécessaires. P>
Si vous avez d'autres suggestions de ce qui est préférable à faire ou quelles sont d'autres alternatives, dites-moi s'il vous plaît. P>
Merci. P>
4 Réponses :
J'écrirais un outil qui remplit une base de données avec les données que vous souhaitez, générez la DB à la limite de la construction et de la supporter dans votre dossier de ressources. Si vous n'allez pas y écrire, vous pouvez simplement le laisser là-bas et l'accéder directement, si vous vouliez y écrire, vous auriez besoin de le copier quelque part que vous êtes autorisé à écrire (comme le dossier de documents). p>
C'est une jolie vieille réponse. Est-ce toujours vrai? Si je ne vais pas écrire dans la base de données prépopulée, puis-je simplement le lire directement des ressources?
Je créerais une application Mac simple, à partir du modèle d'une application à base de données de base. Copiez votre fichier .xcdatamodel existant sur la par défaut dans le projet (ou ajoutez le nouveau modèle de données et assurez-vous de renommer n'importe où qui fait référence au modèle par défaut). Ouvrez le fichier XIB pour la fenêtre Document dans l'interface Builder et faites glisser l'élément d'entité de données de base de l'interface Builder Bibliothèque Inspecteur. Dans la boîte de dialogue résultante, choisissez une entité pour afficher et sélectionner une interface pour l'afficher. P>
Ce que cela va faire est de créer une interface entièrement fonctionnelle pour ajouter, supprimer ou modifier les propriétés de ce type d'entité. Tout devrait être connecté via des fixations de cacao afin de ne pas avoir besoin d'écrire une ligne de code pour que cela fonctionne. Vous pouvez ajouter des interfaces pour chaque type d'entité dans votre modèle de cette façon. P>
Cela vous permettra de saisir rapidement et d'éditer des données dans un document de données de base, que vous pouvez ensuite économiser sur le disque et ajouter en tant que ressource à votre application iPhone. Les structures de base de données SQLITE sont entièrement compatibles entre les implémentations de données de bureau et iPhone de l'iPhone. J'ai donc constaté qu'il s'agissait d'une manière rapide et facile de tester votre code de données de base de votre iPhone. P>
@ "Bradlarson" Il semble que cette fonctionnalité ("en faisant glisser l'élément d'entité de données de base dans la vue") est interrompue dans xcode4.
Que se passe-t-il lorsque vous devez migrer la base de données sur une version future? Souhaitez-vous essentiellement reconstruire une base de données par défaut pour chaque version du modèle? Je suis curieux s'il est peut-être préférable de renseigner la base de données sur la première fois à partir de certaines listes de propriétés et j'adorerais obtenir vos conseils. Merci Brad!
@iwasrobbed - Dans ce cas, vous migreriez votre base de données groupée vers la dernière version. Vous voudrez éviter de perdre du temps à la mise à niveau de celle de chaque installation iOS. Mes clients MAC que j'ai construits pour cela ont été en mesure de mettre à jour les bases de données au dernier schéma de déploiement dans les versions de l'application iOS de nouvelles versions d'applications.
J'ai raconté mon cerveau pendant des heures à tenter de résoudre ce problème. Ce que je suis venu, c'était simplement de ne pas enregistrer la base de données. De cette façon, il sera initialisé chaque fois que l'application est ouverte. Si vous le sauvegardez, cela continuera à dupliquer. p>
Veuillez vous reporter au Guide de programmation de données de base, ou voir ci-dessous (copie de la PG): p>
" Comment puis-je initialiser un magasin avec des données par défaut? P>
Il y a deux problèmes ici: créer les données et veiller à ce que les données ne soient importées qu'une seule fois. Il existe plusieurs façons de créer les données. P>
Vous pouvez créer un magasin persistant distinct contenant la valeur par défaut données et inclure le magasin comme ressource d'application. Quand tu veux Pour l'utiliser, vous devez soit copier l'ensemble du magasin sur un approprié emplacement, ou copier les objets du magasin par défaut vers un fichier existant boutique. Pour les petits ensembles de données, vous pouvez créer les objets gérés directement dans le code. P> li>
Vous pouvez créer une liste de propriétés - ou un autre fichier basé sur un fichier Représentation des données et stockez-la comme ressource d'application. Lorsque vous souhaitez l'utiliser, vous devez ouvrir le fichier et analyser la Représentation pour créer des objets gérés. p> li> ul>
Vous ne devez pas utiliser cette technique sur iOS, et uniquement si ce n'est absolument nécessaire sur Mac OS X. L'analyse d'un fichier pour créer un magasin entraînant des frais généraux inutiles. Il est bien préférable de créer une base de données de base vous-même hors connexion et utilisez-la directement dans votre application. Il existe également plusieurs façons de garantir que les valeurs par défaut ne sont importées qu'une seule fois: p>
Si vous utilisez iOS ou créant une application sans documents pour Mac OS X, vous pouvez ajouter un chèque sur le lancement de l'application pour déterminer Si un fichier existe à l'emplacement que vous spécifiez pour le magasin d'application. Si ce n'est pas le cas, vous devez importer les données. Pour Un exemple basé sur IOS, voir Coredatabooks. p> li>
Si vous créez une application basée sur des documents utilisant NSPersistenttDocument, vous initialisez Les valeurs par défaut dans InitwithType: Erreur :. P> Li>
S'il y a une possibilité que le magasin (dent dossier) puisse être créé mais les données non importées, vous pouvez ajouter un drapeau de métadonnées au magasin. Vous pouvez vérifier les métadonnées (en utilisant métadataforpersistenttorewithurl: erreur :) plus efficacement que exécuter une extraction (et il ne vous oblige pas à papier Valeurs de données par défaut). P> li> ul>
" p>
Comme mentionné ci-dessus, nous devons généralement créer un magasin par défaut pré-peuplé avec code, puis l'utiliser en tant que Fichier de ressources et le copiez-le depuis le répertoire de documents si le fichier Coredata est manquant. Veuillez rechercher l'exemple de code CoreDatabooks dans votre Organiseur XCode (ou Centre de développeur Apple) et consultez la méthode - (NSPersistTentTorCoordinator *) PersistentStorecoordinator. P>