Как печатать значения отладки Core Data?

Как я могу распечатать значения, отправляемые в базу данных sqlite при использовании SQL Server SQL Debug?

Используя параметр -com.apple.CoreData.SQLDebug 1 "в параметрах отладки Аргументы при запуске", вы можете распечатать структуру SQL просто отлично

(вы можете проверить, как это использовать здесь: XCode4 и основные данные: как включить отладку SQL)

Но проблема в том, что распечатка NSLog похожа на UPDATE ZTABLE SET ZCOLUMN = ? WHERE ZID = ?, и это совсем не помогает, если вы пытаетесь увидеть, что такое полная инструкция SQL и/или данные, отправляемые в базу данных.

Ответ 1

Откройте "Продукт → Схема → Изменить схему..." в Xcode и добавьте на "Аргументы, переданные при запуске":

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

(Второй аргумент запуска необходим для отладки Core Data iOS 10/macOS 10.12 или новее, см. com.apple.CoreData.SQLDebug не работает для получения дополнительной информации.)

Вы увидите все значения, к которым привязаны операторы 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

Ответ 2

Если вы используете Xcode 8, вам также нужно будет добавить дополнительный аргумент

-com.apple.CoreData.Logging.stderr 1