2017-09-07 4 views
0

私は価値があるかどうかを確認するためにNSDecimalNumberと、次のNSPredicateを使用しようとしているとiOSのNSPredicate 0より大きいスウィフト - オプションNSDecimalNumber

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

「バランス」のコアでオプションのNSDecimalNumber属性がありますデータエンティティ。 <の残高、または残高== 0を試しても、結果は空になります(エラーなし)。残高レコードがないことを確認できます。私はそれが属性の「オプションの」性質のためだと思う。オプションの日付とNSNumber値を比較する述語は問題なく動作しています。

私は比較のために使用しなければならない別の構文はありますかオプションNSDecimalNumber

答えて

0

これは任意であるという事実は、違いを生むべきではないという事実です。 使用できる構文は異なりますが、使用する構文も異なります。 あなたはオブジェクト構文試すことができます。

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

をしかし、それはあなたの述語とまったく同じことと同じ結果を返す必要があります。

0より大きくゼロより小さくゼロに等しいすべてのオプションを試した場合(0に等しいと、ゼロバランスのあるエンティティも返されます)、オブジェクトがまったくないという最も簡単な説明です。

私は述語が問題であり、私はいくつかの問題/作成新しいエンティティを保存したり、おそらく彼らが削除されているがあるかどうかを確認するためにあなたを示唆するだろうとは思わない...

はそれがお役に立てば幸いです。

+0

ありがとうございますOleg。間違いなくそこにオブジェクトがあります。完全な述語は:let addPredicate:NSPredicate = NSPredicate(形式: "balance> 0 AND dueDate <%@"、argumentArray:[todayDate])です。私はdueDateだけを含めるようにこれを減らすとうまく動作し、正しいレコードを返します。私が残高とdueDate、またはバランスだけで試してみると、結果は0になります。残念なことにあなたの構文も試してみました。 –

0

フェッチ述語で一時的な属性( "balance")を使用しようとしていたことがわかりました。代わりに、取得した結果に対してフィルタを使用しました。これにより正しい出力が得られます。

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

      return searchResult 

      })! 
関連する問題