如何打印Core Data调试值?

时间:2012-09-06 18:36:42

标签: ios sqlite debugging core-data

如何在使用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语句和/或数据,它根本没有用。

2 个答案:

答案 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