我正在尝试将以下NSPredicate
与NSDecimalNumber
一起使用,以检查某个值是否大于0.
let addPredicate:NSPredicate = NSPredicate(format:"balance > 0", argumentArray: [])
“balance”是Core Data实体中的可选NSDecimalNumber属性。结果是空的(没有错误),即使我尝试平衡< 0,或balance == 0.我可以确认没有空余额记录。我怀疑这是由于属性的“可选”性质。比较可选日期和NSNumber值的谓词没有问题。
我应该使用不同的语法来比较可选 NSDecimalNumber
吗?
答案 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
})!