2016-05-26 9 views
3

I'veを理解can't変数ははNSFetchRequestのために非常に "単純な" 述語がfetchRequest.predicate

からそう

enter image description here

です

fetchRequest.predicate = NSPredicate(format: "kategorie == %i", kategorie.katid!) 

kategorie.katidが、私はそれを理解can't 1

ている間、私は述語

kategorieの== 18

を取得します: - (

ヘルプがありますか?

NSPredicate(format: "kategorie = \(kategorie.katid!)") 

をそして、あなたがなど%I、または%LD、または%@を、必要があるかどうかを心配する必要はありません。本当に奇妙ですが、あなただけ行うことができます

答えて

2

katid(オプション)NSNumberであり、どのようなあなたのケース で発生するオブジェクトのアドレス(の下位32ビット)の整数とすることです。

正しいフォーマット 指定子は%@NSObjectサブクラスのインスタンス)である。あるいは

NSPredicate(format: "kategorie == %@", kategorie.katid!) 

、整数にオブジェクトを変換する:もちろん

NSPredicate(format: "kategorie == %d", kategorie.katid!.intValue) 

を、強制的にアンラッピングは避けるべきです、例えば

フォーマット文字列内の文字列補間を使用して
NSPredicate(format: "kategorie == %d", kategorie.katid?.intValue ?? 0) 

( @Gargoyleにより示唆されるように)一般的に、数字のこの特殊なケースでは、別のソリューションです ではなく:あなたは文字列を補間する場合は、任意のパーセント 文字ます書式指定子として解釈され、予期しない出力やクラッシュにつながります( )。また、一重引用符または二重引用符は、 が述語 書式文字列で特別な意味を持つため、問題につながります。

+0

@マーティンR:説明をありがとうございました –

+0

引用符とパーセントについての良いコメント。それは私のために来ることはありませんが、それは人々に知らせるための明確な懸念です! – Gargoyle

3

..

+0

これは問題なく機能します。多くのyor迅速な返信ありがとう!それは本当に奇妙です! –

関連する問題