2017-09-07 25 views
0

我嘗試使用以下NSPredicateNSDecimalNumber來檢查值大於0斯威夫特 - iOS設備NSPredicate可選NSDecimalNumber

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

「平衡」是一個核心的可選NSDecimalNumber屬性數據實體。結果是空的(沒有錯誤),即使我嘗試平衡< 0或餘額== 0.我可以確認沒有空餘記錄。我懷疑這是由於屬性的「可選」性質。預測比較可選日期和NSNumber值是沒有​​問題的。

是否有不同的語法我應該用來比較可選NSDecimalNumber

回答

0

它是可選的事實不應該有所作爲。 您可以使用不同的語法,但您的工作也應該如此。 您可以嘗試的對象語法:

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

但它確實完全一樣的謂語,應返回相同的結果。

如果您嘗試了所有選項,即大於0且小於零且等於零(等於零也應返回具有零餘額的實體!),那麼最簡單的解釋是根本沒有對象。

我不認爲謂語的問題,我建議你檢查是否有一些問題,創建/保存新的實體或者他們被刪除...

希望它能幫助。

+0

Thankyou爲您的答覆奧列格。那裏肯定有物體。完整的謂詞是:let addPredicate:NSPredicate = NSPredicate(format:「balance> 0 AND dueDate <%@」,argumentArray:[todayDate])。如果我減少這隻包括dueDate它工作正常,並返回正確的記錄。如果我嘗試使用balance和dueDate,或者單獨衡算,我會得到0個結果。我也嘗試過你的語法,不幸的是沒有運氣。 –

0

剛剛意識到問題在於我試圖在提取謂詞中使用瞬態屬性(「平衡」)。所以相反,我對取出的結果使用了一個過濾器,並且這給出了正確的輸出。

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

      return searchResult 

      })!