Xcode 9.3 - NSPredicate Bool 崩溃
Posted
技术标签:
【中文标题】Xcode 9.3 - NSPredicate Bool 崩溃【英文标题】:Xcode 9.3 - NSPredicate Bool crash 【发布时间】: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) 【参考方案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)
是另一种选择。以上是关于Xcode 9.3 - NSPredicate Bool 崩溃的主要内容,如果未能解决你的问题,请参考以下文章