【问题标题】:How to print Core Data debug values?如何打印核心数据调试值?
【发布时间】:2012-08-31 15:25:57
【问题描述】:

如何在使用 Core Data SQL Debug 时打印发送到 sqlite 数据库的值?

在我的“Arguments Passed on Launch”调试选项中使用“-com.apple.CoreData.SQLDebug 1”可以很好地打印 SQL 结构

(你可以在这里查看如何使用它:XCode4 and Core Data: How to enable SQL Debugging

但问题是打印的 NSLog 类似于 UPDATE ZTABLE SET ZCOLUMN = ? WHERE ZID = ?,如果您试图查看完整的 SQL 语句和/或发送到数据库的数据是什么,它根本没有帮助。

【问题讨论】:

    标签: ios sqlite debugging core-data


    【解决方案1】:

    在 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
    

    【讨论】:

    • 它没有显示NSFetchRequest 请让我知道有什么方法可以显示也
    • @VarunNaharia:您可以简单地打印请求,例如 NSLog(@"request: %@", request)
    • 我正在使用 swift,我在控制台上检查了po fetchRequest,我得到了这个<NSFetchRequest: 0x1704c23e0> (entity: TravelDetail; predicate: (id == 6412); sortDescriptors: ((null)); type: NSManagedObjectResultType; )
    • @VarunNaharia:在 Swift 中你可以做到print("request:", request)
    【解决方案2】:

    如果你使用的是 Xcode 8,你还需要添加额外的参数

    -com.apple.CoreData.Logging.stderr 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      • 2016-02-10
      • 2010-11-27
      • 2020-12-17
      • 1970-01-01
      相关资源
      最近更新 更多