2016-11-18 29 views
0

た後、私は2番目の行、悪いアクセス、理由もなく上のNSPredicateクラッシュswift3への移行後の迅速な3移行

let fetchRequest: NSFetchRequest<User> = User.fetchRequest() 
    fetchRequest.predicate = NSPredicate(format: "id == %@", id) 

私のアプリがクラッシュを修正することはできません問題があります。タイプは正しい、ログはない、何もない、悪いアクセスです。助言がありますか? 、述語が間違っている、原因idはInt64のタイプである理由を発見

%@フォーマットは、引数として財団オブジェクトを期待述語の種類私は迅速

答えて

5

のこのバージョンのために必要な見当がつかない、 を比較「述語プログラミングガイド」の"Predicate Format String Syntax"を参照してください。

あなたはNSNumberInt64を埋めることができます。

let id = Int64.max 
let predicate = NSPredicate(format: "id == %@", id as NSNumber) 
print(predicate) // id == 9223372036854775807 

または "長い長い" への形式を変更:NSNumberすべて数タイプの橋渡し

let id = Int64.max 
let predicate = NSPredicate(format: "id == %lld", id) 
print(predicate) // id == 9223372036854775807 

スイフト3.0のよう可能です.1(Xcode 8.1)の実装で SE-0139 Bridge Numeric Types to NSNumber and Cocoa Structs to NSValue

+1

FWIWは、述語が常に間違っていたことを意味し、Swift 3の変更は間違っていることを明確にしています。 –

+0

@TomHarringtonそれは非常に興味深い、すべての作品が正しい原因です –