【问题标题】:Xcode 9.3 - NSPredicate Bool crashXcode 9.3 - NSPredicate Bool 崩溃
【发布时间】:2018-05-17 10:24:50
【问题描述】:

Xcode 9.3 更新后,我注意到如果你想拥有这样的 Predicate:

let predicate = NSPredicate(format: "preferred = %@", true as CVarArg)

你遇到了崩溃。但在 Xcode 9.2 中,这不是问题。有什么想法吗?

【问题讨论】:

  • 看来不是关于 Xcode,而是关于 Swift 更新(Xcode 9.3 包括 Swift 4.1)

标签: ios swift xcode xcode9.3


【解决方案1】:

// 解决方案3 [Apple Documentation]

let predicate = NSPredicate(format: "preferred == TRUE")

出现异常是因为true 不是对象 (%@)。您需要%d 占位符

let predicate = NSPredicate(format: "preferred = %d", true)

【讨论】:

    【解决方案2】:

    我觉得你也可以用这个:

    NSPredicate(format: "preferred = true")
    

    【讨论】:

    • 是的,这也是一个解决方案!我也注意到了这一点。基本上,最好避免像我一开始那样将 swift boolean 作为 CVarArg 传递。不明白为什么,但没关系。
    【解决方案3】:

    经过一番调查,我发现了如何解决这个问题。简而言之:

    // Solution 1 [ NSNumber ]
    let bool = NSNumber(booleanLiteral: true)
    let predicate = NSPredicate(format: "preferred = %@", bool as CVarArg)
    
    // Solution 2 [ Bool ] (static example)
    let predicate = NSPredicate(format: "preferred == YES")
    

    正如here 所解释的,当我们必须处理这种方法时,处理 Obj-C 类型而不是 Swift 类型会更好。

    【讨论】:

    • NSPredicate(format: "preferred = %@", true as NSNumber) 是另一种选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    相关资源
    最近更新 更多