Xcode 9.3 - NSPredicate Bool crash

后端 未结 3 1686
伪装坚强ぢ
伪装坚强ぢ 2021-01-24 15:52

After the Xcode 9.3 update, I\'ve noticed that if you want to have Predicate like this:

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


        
相关标签:
3条回答
  • 2021-01-24 16:06

    // Solution 3 [ Apple Documentation ]

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

    The exception occurs because true is not an object (%@). You need the %d placeholder

    let predicate = NSPredicate(format: "preferred = %d", true)
    
    0 讨论(0)
  • 2021-01-24 16:07

    I think you can also use this:

    NSPredicate(format: "preferred = true")
    
    0 讨论(0)
  • 2021-01-24 16:30

    After a bit of investigation, I've discovered how to fix this. In short:

    // 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")
    

    As also explained here, it's simply better to deal with Obj-C type instead of Swift type when we have to deal with this kind of methods.

    0 讨论(0)
提交回复
热议问题