¿Cómo puedo verificar qué se almacena en mi database de datos básicos?

Estoy haciendo una aplicación que se basa en Core Data. Puedo ingresar datos en un campo de text y enviarlos.

Me preguntaba ¿cómo puedo verificar qué se almacena en la database en términos de inputs?

Estoy intentando hacer un detailView a mi tableView y no estoy obteniendo ningún resultado. Ahora me pregunto es porque estoy haciendo algo mal con mi código, o si los datos no se almacenan correctamente?

Saludos Jeff

Si usa sqlite como medio de almacenamiento para Core Data, puede ejecutar su aplicación en un simulador e intentar comprobar el file de la database que se encuentra en la carpeta de la biblioteca del recinto de testings.

El path será algo así como: ~ / Library / Application Support / iPhone Simulator / 5.1 / Applications / 3BF8A4B3-4959-4D8F-AC12-DB8EF4C3B6E1 / Library / YourAppName.sqlite

Para abrir el file sqlite, necesita una herramienta. Utilizo una herramienta gratuita llamada Liya ( http://itunes.apple.com/us/app/liya/id455484422?mt=12 ).

Aquí está mi solución (funciona en iOS 9):

Utilizo un script automator / bash que abre la database en sqllitebrowser. el script encuentra la última aplicación instalada en el simulador. Instrucciones:

  1. Instale DB Browser para SQLite ( http://sqlitebrowser.org/ )
  2. Cree un nuevo flujo de trabajo en Apple Automator.
  3. Arrastre "Ejecutar shell script block" y pegue este código:
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 

introduzca la descripción de la imagen aquí

  1. (Opcional) Convierta este flujo de trabajo a la aplicación, guárdelo y arrástrelo a su base. Para actualizar la database, simplemente click el ícono de la aplicación.

La carpeta donde se almacena el file db se ha modificado recientemente y no es donde esperabas encontrarlo. Esto es lo que solía resolver esto: primero agregue este código a su vista. DidLoad o applicationDidFinishLaunching:

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

¿Tienes esto desde aquí? ¿ Dónde está el directory de documentos para el simulador ios 8?

Esto revelará la location real de su aplicación en la console durante el time de ejecución. Luego use el SQLiteBrowser para verificar el contenido de su SQLite DB.

Funcionó como un encanto para mí;)

Como se dijo antes, puede usar la herramienta de línea de command sqllite.

Sin embargo, también puede establecer el indicador de debugging, que eliminará todos los commands sql mientras se ejecutan a través de los datos del núcleo.

Edite el esquema y agregue esto en "Argumentos aprobados al iniciar"

-com.apple.CoreData.SQLDebug 1

En Swift 3, tiene el NSPersistentContainer y puede recuperar la ruta de allí de esta manera:

 persistentContainer.persistentStoreCoordinator.persistentStores.first?.url 

(Suponiendo que solo estás usando una tienda persistente)

Descargue el browser SQLite desde aquí .

Ejecute su aplicación en el Simulador. La aplicación debe copyrse a una ruta en su Mac que se parece a:

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

Una vez que encuentre su aplicación, debe profundizar para encontrar la base sqlite (por lo general, está en Documentos).

1) Obtenga la ruta de la database sql de su simulador.

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

2) Abrir buscador. Presione Cmd + Mayús + G. Pega algo que obtienes del párrafo 1. Ej:

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

3) Descargue en el progtwig AppStore como SQLPro .

4) Abra el file en la carpeta con el nombre "ProjectName.sqlite".

¡BUEN TRABAJO! Verás algo como esto: introduzca la descripción de la imagen aquí

Disculpa por la respuesta tardía

No pude encontrarlo en la carpeta simulador de iphone. Luego descubrí la carpeta imprimiendo la ruta del documento en el logging.

Código:

NSLog (@ "La ruta es% @", [[[NSFileManager defaultManager] URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask] lastObject]);

y el path resulta ser así:

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

Si ya tiene acceso a los files sqlite, shm y wal, ejecute los commands en el terminal para combinar el file WAL en el file sqlite.

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

Después de ejecutar los commands anteriores, puede ver los datos en su file sqlite.


Utilidad para copyr files sqlite en sus escritorios (cambie la ruta del escritorio y dé la ruta absoluta, el símbolo ~ no funcionará.

Para iOS 10.0+ puede usar persistentContainer.persistentStoreCoordinator.persistentStores.first?.url

He creado la function de utilidad que copy el file sqlite en la location deseada (funciona solo para el simulador). Puedes usar la utilidad que te gusta

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

Aquí hay una definición del método de utilidad para 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 copied @param persistentContainer NSPersistentContainer */ public static func getSqliteTo(destinationPath: String, 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) copied 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") } 

Para el 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 copied @param persistentContainer NSPersistentContainer */ + (void)copySqliteFileToDestination:(NSString *)destinationPath persistentContainer:(NSPersistentContainer *)persistentContainer { NSError *error = nil; NSURL *storeUrl = persistentContainer.persistentStoreCoordinator.persistentStores.firstObject.URL; NSString * sqliteFileName = [storeUrl lastPathComponent]; NSString *walFileName = [sqliteFileName stringByAppendingString:@"-wal"]; NSString *shmFileName = [sqliteFileName stringByAppendingString:@"-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 (NSString *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: %@ copied 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"); } 

Puede considerar print para una debugging rápida. (Una ventaja sería que puede hacer una simple debugging sin salir de XCode).

Por ejemplo, para una Entidad "Animales" con un Atributo "AnimalName", intente esto –

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

Tan lejos como MacOS Sierra versión 10.12.2 y XCode 8 se refiere

La carpeta debe estar aquí:

/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

Una respuesta para un noobs como lo fui, pasé 4 meses descubriéndolo. Los pasos que seguí son:

  1. Buscador abierto y presione Command(Windows) + Shift + G
  2. Vaya a la carpeta add ~/Library/Developer
  3. Busque el nombre de la database que ha creado, ya que en mi caso era my.db en SQLite.
  4. Descargue e instale DB Browser para SQLite.
  5. Haga clic en Abrir database.
  6. Ahora arrastre y suelte el file DB desde su buscador.