Swift - 带有可选NSDecimalNumber的iOS NSPredicate

时间:2017-09-07 05:23:02

标签: ios swift nspredicate nsdecimalnumber

我正在尝试将以下NSPredicateNSDecimalNumber一起使用,以检查某个值是否大于0.

let addPredicate:NSPredicate = NSPredicate(format:"balance > 0", argumentArray: [])

“balance”是Core Data实体中的可选NSDecimalNumber属性。结果是空的(没有错误),即使我尝试平衡< 0,或balance == 0.我可以确认没有空余额记录。我怀疑这是由于属性的“可选”性质。比较可选日期和NSNumber值的谓词没有问题。

我应该使用不同的语法来比较可选 NSDecimalNumber吗?

2 个答案:

答案 0 :(得分:0)

它是可选的这一事实不应该有所作为。 您可以使用不同的语法,但您的语法也应该可以使用。 您可以尝试对象语法:

NSPredicate(format:"balance > %@", argumentArray: [NSDecimalNumber.zero])

但它与谓词完全相同,应返回相同的结果。

如果您尝试了所有选项,即大于0且小于零且等于零(等于零也应返回具有零余额的实体!),那么最简单的解释是根本没有对象。< / p>

我不认为谓词是问题,我建议您检查创建/保存新实体是否存在问题,或者可能会删除它们...

希望它有所帮助。

答案 1 :(得分:0)

刚刚意识到问题是我试图在fetch谓词中使用瞬态属性(&#34; balance&#34;)。因此,我在获取的结果上使用了一个过滤器,这给出了正确的输出。

filteredItems = (fetchedResultsController.fetchedObjects?.filter { item in
            let searchResult:Bool = (item.balance!.compare(NSDecimalNumber.zero) == .orderedDescending)

            return searchResult

            })!