2016-05-06 5 views
1

これは私のNSPredicateです:"無効な述語:RHSゼロ" NSPredicate形式の第二引数のため

print(searchTextField.text!) 
let predicate = NSPredicate(format: "student.schoolClass.id = %d AND (book.title CONTAINS[cd] %@ OR student.username CONTAINS[cd] %@)", currentSchoolClass.id, searchTextField.text!, searchTextField.text!) 

私は次のものがある:

fetchedResultsController.fetchRequest.predicate = predicate 
print(fetchedResultsController.fetchRequest.predicate!) 
try! fetchedResultsController.performFetch() //here is the crash 

コンソール出力は次のとおりです。

j 
student.schoolClass.id == 1 AND (book.title CONTAINS[cd] nil OR student.username CONTAINS[cd] "j") 

クラッシュ情報:

CRASH: Invalid predicate: nil RHS 

奇妙なのですか?

答えて

6

...それがお役に立てば幸い、C intは 、32ビットの整数であり、それは%dフォーマットは、可変引数リストに期待するものです。 64ビット整数を渡すと、次の可変引数 を読み出すと余分な4バイトが読み込まれます。

フォーマットがどの整数タイプのためのものである、以下の表に示す:符号なしのタイプの

 
    Format C type   Swift type 
    ----------------------------------- 
    %d  int    Int32 
    %ld  long int  Int 
    %lld  long long int Int64 

と同様。

あるいは、NSNumberオブジェクトの整数を変換し %@フォーマットを使用し、これはすべてのサイズの整数の 作品。例:

let value = 1234 
let predicate = NSPredicate(format: "value = %@", value as NSNumber) 
+0

あなたは思いますか?確かに、それは** iPad Pro **で動作し、** iPad 4 **では動作しません。それは何かを説明しますか? –

+0

@BartłomiejSemańczyk:iPad 4、私の提案またはあなたのコードでは何が動作しませんか? –

+0

質問からの私のコード。しかし、** int64 **ですが、単純な文字列を持つ 'schoolClass.id'に問題はないようです。 –

0

searchTextFieldに何もないので、nilを挿入しています。

述語にnilと表示されるようにします。

テキストフィールドの値を確認してください。

は、現在のすべてのiOSとOS Xプラットフォームでは

+0

質問を更新しました。「searchTextField.text!」の正しい値があります。 –

関連する問題