0

私はスタンフォード大学を使用UICoreDataTableViewControllerしてデータベースのフェッチを実行しています。

私のメインビューでは、ユーザーはsearchBarにfloatを入力し、検索をタップすることで、述語は最大値と最小値の間の値のみをフェッチするようにします(つまり、3から10の間のfloat)。

メインビューでは、エンティティを使用して文字列を作成し、検索を実行する必要がある属性を使用して文字列を作成し、最後に述語(xより大きくyより小さい)を含む配列を作成します。文字列と配列をに渡しますprepareForSegue。それはかなりうまくいきます。

ユーザーが数字を入力しなくても、すべての値を表示できるようにしたいと思います。そこで、prepareForSegueNSLogに従って正しく呼び出される条件を追加しました。

問題は、属性の一部の値がゼロであるということです(私はそれを確認しました)。prepareForeSegue次の述語配列を渡す場合:

prepredicateArrayToPass=[NSArray arrayWithObject:[NSPredicate predicateWithFormat:@"%@ !=nil", attributeToPass]];

フェッチは、nil値を0として解釈して実行されるため、表示されます。良くない。

ただし、述語をコピーしてsetupFetchedResultsControllerメソッドに直接貼り付けるUICoreDataTableViewControllerと、完全に機能し、nil値は表示されません。

に条件を直接追加すると、UICoredataTableViewControllerどちらも機能しません。

私はそれをさらに進める方法を本当に知りません。どんな助けでも大歓迎です。

ありがとう。

4

1 に答える 1

2

だから、質問を投稿してから数分以内に答えが見つかりました。

問題は、述語文字列の単純な構文でした。%@を使用して属性を指定する代わりに、%Kにする必要があります。すべてがドキュメントで説明されています。

したがって、述語配列は次のようになります。

prepredicateArrayToPass=[NSArray arrayWithObject:[NSPredicate predicateWithFormat:@"%K !=nil", attributeToPass]];

今はチャームとして機能します。

于 2012-06-18T20:13:56.883 に答える