Comment puis-je vérifier ce qui est stocké dans ma database de base?

Je fais une application qui repose sur des données de base. Je suis en mesure d'entrer des données dans un textField et de le soumettre.

Je me demandais comment puis-je vérifier ce qui est stocké dans la database en termes d'inputs?

J'essaye de faire un detailView à ma tableVoir et je n'obtiens aucun résultat. Maintenant, je me request si c'est parce que je fais quelque chose de mal avec mon code, ou si datatables sont stockées correctement?

À la vôtre Jeff

Si vous utilisez sqlite comme support de stockage pour Core Data, vous pouvez exécuter votre application dans le simulateur et essayer de vérifier le file de database qui se trouve dans le dossier Bibliothèque du sandbox.

Le path doit être quelque chose comme: ~ / Bibliothèque / Application Support / iPhone Simulator / 5.1 / Applications / 3BF8A4B3-4959-4D8F-AC12-DB8EF4C3B6E1 / Bibliothèque / YourAppName.sqlite

Pour ouvrir le file sqlite, vous avez besoin d'un outil. J'utilise un outil gratuit appelé Liya ( http://itunes.apple.com/us/app/liya/id455484422?mt=12 ).

Voici ma solution (fonctionne sur iOS 9):

J'utilise un script automator / bash qui ouvre la database dans sqllitebrowser. le script trouve la dernière application installée dans le simulateur. Instructions:

  1. Installer DB Browser pour SQLite ( http://sqlitebrowser.org/ )
  2. Créer un nouveau stream de production dans Apple Automator
  3. Faites glisser "Exécuter le bloc de script Shell" et collez ce code:
cd ~/Library/Developer/CoreSimulator/Devices/ cd `ls -t | head -n 1`/data/Containers/Data/Application cd `ls -t | head -n 1`/Documents open -a DB\ Browser\ for\ SQLite ./YOUR_DATABASE_NAME.sqlite 

entrez la description de l'image ici

  1. (Facultatif) Convertissez ce stream de production en application, enregistrez-le et faites-le glisser vers votre dock. Pour actualiser la database, cliquez simplement sur l'icône de l'application.

Le dossier dans lequel la database est stockée a récemment été modifié et n'est pas celui où vous vous attendez à le find. Voici ce que j'ai utilisé pour résoudre ceci: D'abord append ce code à votre viewDidLoad ou applicationDidFinishLaunching:

  #if TARGET_IPHONE_SIMULATOR // where are you? NSLog(@"Documents Directory: %@", [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]); #endif 

Vous avez ici: où est le directory de documents pour le simulateur ios 8

Cela révèlera l'location réel de votre application dans la console pendant l'exécution. Utilisez ensuite SQLiteBrowser pour vérifier le contenu de votre database SQLite.

A fonctionné à merveille pour moi 😉

Comme dit précédemment, vous pouvez utiliser l'outil de command line sqllite.

Toutefois, vous pouvez également définir l'indicateur de debugging, qui videra toutes les commands SQL lors de leur exécution via datatables de base.

Modifiez le schéma et ajoutez-le dans les "Arguments passés au lancement"

-com.apple.CoreData.SQLDebug 1

Dans Swift 3, vous avez le NSPersistentContainer et vous pouvez récupérer le path à partir de là comme ceci:

 persistentContainer.persistentStoreCoordinator.persistentStores.first?.url 

(En supposant que vous utilisez uniquement un magasin persistant)

Téléchargez le browser SQLite à partir d' ici .

Exécutez votre application dans le simulateur. L'application doit être copiée sur un path sur votre Mac qui ressemble à:

 /Users/$your username$/Library/Application Support/iPhone Simulator/$your iphone simulator version$/Applications/ 

Une fois que vous avez trouvé votre application, vous devez creuser plus profondément pour find le sqlite db (Il est généralement sous Documents).

1) Obtenir le path de la database sql de votre simulateur.

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSLog(@"%@", [paths objectAtIndex:0]); 

2) Ouvrez le Finder. Appuyez sur Cmd + Maj + G. Collez quelque chose, que vous avez obtenu du paragraphe 1. Ex:

 /Users/USERNAME/Library/Developer/CoreSimulator/Devices/701BAC5F-2A42-49BA-B733-C39D563208D4/data/Containers/Data/Application/DCA9E9C7-5FEF-41EA-9255-6AE9A964053C/Documents 

3) Télécharger dans le programme AppStore comme SQLPro .

4) Ouvrez le file dans le dossier nommé "ProjectName.sqlite".

BON TRAVAIL! Vous verrez quelque chose comme ceci: entrez la description de l'image ici

Désolé pour la réponse tardive

Je n'ai pas pu le find dans le dossier du simulateur iphone. Ensuite, j'ai trouvé le dossier en imprimant le path doc dans le journal.

Code:

NSLog (@ "Le path est% @", [[[NSFileManager defaultManager] URLsForDirectory: NSDocumentDirectory dansDomains: NSUserDomainMask] lastObject]);

et le path se révèle être comme ceci:

///Users//Library/Developer/CoreSimulator/Devices//data/Containers/Data/Application//Documents/coredata.sqlite

Si vous avez déjà access aux files sqlite, shm et wal, exécutez les commands du terminal pour merge le file WAL dans le file sqlite.

 $ sqlite3 persistentStore sqlite> PRAGMA wal_checkpoint; Press control + d 

Après avoir exécuté les commands ci-dessus, vous pouvez voir datatables dans votre file sqlite.


Utilitaire pour copyr des files sqlite sur vos bureaux (changez le path du bureau et donnez le path absolu, le symbole ~ ne fonctionnera pas.

Pour iOS 10.0+ vous pouvez utiliser iOS 10.0+ persistentContainer.persistentStoreCoordinator.persistentStores.first?.url

J'ai créé la fonction d'utilité qui copy le dossier de sqlite à l'endroit désiré (fonctionne seulement pour le simulateur). Vous pouvez utiliser l'utilitaire comme

 import CoreData let appDelegate = UIApplication.shared.delegate as! AppDelegate UTility.getSqliteTo(destinationPath: "/Users/inderkumarrathore/Desktop", persistentContainer: appDelegate.persistentContainer) 

Voici la définition de la méthode d'utilité pour swift

 /** Copies the sqlite, wal and shm file to the destination folder. Don't forget to merge the wal file using the commands printed int the console. @param destinationPath Path where sqlite files has to be copyd @param persistentContainer NSPersistentContainer */ public static func getSqliteTo(destinationPath: Ssortingng, persistentContainer: NSPersistentContainer) { let storeUrl = persistentContainer.persistentStoreCoordinator.persistentStores.first?.url let sqliteFileName = storeUrl!.lastPathComponent let walFileName = sqliteFileName + "-wal" let shmFileName = sqliteFileName + "-shm" //Add all file names in array let fileArray = [sqliteFileName, walFileName, shmFileName] let storeDir = storeUrl!.deletingLastPathComponent() // Destination dir url, make sure file don't exists in that folder let destDir = URL(fileURLWithPath: destinationPath, isDirectory: true) do { for fileName in fileArray { let sourceUrl = storeDir.appendingPathComponent(fileName, isDirectory: false) let destUrl = destDir.appendingPathComponent(fileName, isDirectory: false) try FileManager.default.copyItem(at: sourceUrl, to: destUrl) print("File: \(fileName) copyd to path: \(destUrl.path)") } } catch { print("\(error)") } print("\n\n\n ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ NOTE ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n") print("In your terminal run the following commands to merge wal file. Otherwise you may see partial or no data in \(sqliteFileName) file") print("\n-------------------------------------------------") print("$ cd \(destDir.path)") print("$ sqlite3 \(sqliteFileName)") print("sqlite> PRAGMA wal_checkpoint;") print("-------------------------------------------------\n") print("Press control + d") } 

Pour objective-c

 /** Copies the sqlite, wal and shm file to the destination folder. Don't forget to merge the wal file using the commands printed int the console. @param destinationPath Path where sqlite files has to be copyd @param persistentContainer NSPersistentContainer */ + (void)copySqliteFileToDestination:(NSSsortingng *)destinationPath persistentContainer:(NSPersistentContainer *)persistentContainer { NSError *error = nil; NSURL *storeUrl = persistentContainer.persistentStoreCoordinator.persistentStores.firstObject.URL; NSSsortingng * sqliteFileName = [storeUrl lastPathComponent]; NSSsortingng *walFileName = [sqliteFileName ssortingngByAppendingSsortingng:@"-wal"]; NSSsortingng *shmFileName = [sqliteFileName ssortingngByAppendingSsortingng:@"-shm"]; //Add all file names in array NSArray *fileArray = @[sqliteFileName, walFileName, shmFileName]; // Store Directory NSURL *storeDir = storeUrl.URLByDeletingLastPathComponent; // Destination dir url, make sure file don't exists in that folder NSURL *destDir = [NSURL fileURLWithPath:destinationPath isDirectory:YES]; for (NSSsortingng *fileName in fileArray) { NSURL *sourceUrl = [storeDir URLByAppendingPathComponent:fileName isDirectory:NO]; NSURL *destUrl = [destDir URLByAppendingPathComponent:fileName isDirectory:NO]; [[NSFileManager defaultManager] copyItemAtURL:sourceUrl toURL:destUrl error:&error]; if (!error) { RLog(@"File: %@ copyd to path: %@", fileName, [destUrl path]); } } NSLog(@"\n\n\n ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ NOTE ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n"); NSLog(@"In your terminal run the following commands to merge wal file. Otherwise you may see partial or no data in %@ file", sqliteFileName); NSLog(@"\n-------------------------------------------------"); NSLog(@"$ cd %@", destDir.path); NSLog(@"$ sqlite3 %@", sqliteFileName); NSLog(@"sqlite> PRAGMA wal_checkpoint;"); NSLog(@"-------------------------------------------------\n"); NSLog(@"Press control + d"); } 

Vous pouvez envisager d' print pour un debugging rapide. (Un avantage serait que vous pouvez faire un simple debugging sans quitter XCode.)

Par exemple, pour une entité "Animaux" avec un atsortingbut "AnimalName", essayez ceci –

 var animals: [NSManagedObject]! for var i = 0 ; i < animals.count ; i++ { print(animals[i].valueForKey("AnimalName") as! Ssortingng) } 

En ce qui concerne macOS Sierra version 10.12.2 et XCode 8 est concerné

Le dossier devrait être ici:

/Users/$username$/Library/Developer/CoreSimulator/Devices/D257F6F9-2774-4E57-A3AD-EA54B8D17474/data/Containers/Data/Application/304FF3B5-2410-4F81-A3E0-1CA36F35C9CD/Library/Application Support/xyz.sqlite

Une réponse pour un noobs comme j'étais, j'ai passé 4 mois à le comprendre. Les étapes que j'ai suivies sont:

  1. Ouvrez finder et appuyez sur Command(Windows) + Shift + G
  2. Allez dans le dossier add ~/Library/Developer
  3. Recherchez le nom de la database que vous avez créé, car dans mon cas c'était my.db dans SQLite.
  4. Téléchargez et installez le browser de database pour SQLite.
  5. Cliquez sur la database ouverte.
  6. Maintenant faites glisser et déposez le file DB à partir de votre finder.