如何在使用Core Data SQL Debug时打印发送到sqlite数据库的值?
在我的“启动时传递的参数”调试选项中使用“ -com.apple.CoreData.SQLDebug 1 ”打印SQL结构就好了
(你可以在这里查看如何使用它:XCode4 and Core Data: How to enable SQL Debugging)
但问题是打印的NSLog类似于UPDATE ZTABLE SET ZCOLUMN = ? WHERE ZID = ?
,如果你试图查看发送到数据库的完整SQL语句和/或数据,它根本没有用。
答案 0 :(得分:32)
在Xcode中打开“Product - > Scheme - > Edit Scheme ...”并添加 到“发射时传递的论据”:
-com.apple.CoreData.SQLDebug 3
-com.apple.CoreData.Logging.stderr 1
(Core Data调试需要第二个启动参数 iOS 10 / macOS 10.12或更高版本,有关详细信息,请参阅com.apple.CoreData.SQLDebug not working。)
您将看到SQL语句绑定的所有值。 示例输出:
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
答案 1 :(得分:2)
如果您使用的是Xcode 8,则还需要添加其他参数
-com.apple.CoreData.Logging.stderr 1