Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to print Core Data debug values?

How can I print the values being sent to the sqlite database while using Core Data SQL Debug?

Using the "-com.apple.CoreData.SQLDebug 1" in my "Arguments Passed on Launch" debug options prints the SQL structure just fine

(you can check see how to use this here: XCode4 and Core Data: How to enable SQL Debugging)

But the problem is that the NSLog printed is something like UPDATE ZTABLE SET ZCOLUMN = ? WHERE ZID = ? and it does not help at all if you are trying to see what is the full SQL statement and/or data being sent to the database.

like image 215
Felipe Sabino Avatar asked Sep 06 '12 18:09

Felipe Sabino


People also ask

How can I view core data in iOS?

Open Xcode and create a new project by choosing the Single View App template form the iOS > Application section. Name the project Notes and check Use Core Data at the bottom. Open AppDelegate.

How does Core Data save data?

Most interactions with Core Data will occur through an instance of NSManagedObjectContext : the portal through which our app will create new entities, save changes, and fetch from the store. The persistent container comes with a NSManagedObjectContext as one of its built-in properties.


2 Answers

Open "Product -> Scheme -> Edit Scheme..." in Xcode and add to "Arguments Passed on Launch":

-com.apple.CoreData.SQLDebug 3
-com.apple.CoreData.Logging.stderr 1 

(The second launch argument is needed for Core Data debugging on iOS 10/macOS 10.12 or later, see com.apple.CoreData.SQLDebug not working for more information.)

The you'll see all the values that the SQL statements are bound to. Example output:

test56[1588:c07] CoreData: sql: BEGIN EXCLUSIVE
test56[1588:c07] CoreData: sql: INSERT INTO ZEVENT(Z_PK, Z_ENT, Z_OPT, ZTIMESTAMP) VALUES(?, ?, ?, ?)
test56[1588:c07] CoreData: details: SQLite bind[0] = (int64)13
test56[1588:c07] CoreData: details: SQLite bind[1] = (int64)1
test56[1588:c07] CoreData: details: SQLite bind[2] = (int64)1
test56[1588:c07] CoreData: details: SQLite bind[3] = "368650709.435904"
test56[1588:c07] CoreData: sql: COMMIT
like image 133
Martin R Avatar answered Oct 16 '22 10:10

Martin R


If you are using Xcode 8, you will need to also need to add additional argument

-com.apple.CoreData.Logging.stderr 1
like image 31
Nupur Daddikar Avatar answered Oct 16 '22 11:10

Nupur Daddikar