2016-05-16 3 views
0

次のコードでは、コアデータから結果を取り出してテーブルビューを作成しています。NSNumber = 0の述語

private lazy var fetchedResultsController: NSFetchedResultsController = { 
    // Initialize Fetch Request 
    let fetchRequest = NSFetchRequest(entityName: "MileageLog") 

    // Add Sort Descriptors 
    let dateSort = NSSortDescriptor(key: "logDate", ascending: true) 
    let mileSort = NSSortDescriptor(key: "mileage", ascending: true) 
    fetchRequest.sortDescriptors = [dateSort, mileSort] 

    //// Create a new predicate that filters out any object that 
    //// have not been exported. 
    // let predicate = NSPredicate(format: "wasExported == %@", 0) 

    //// Set the predicate on the fetch request 
    // fetchRequest.predicate = predicate 

    let delegate = UIApplication.sharedApplication().delegate as! AppDelegate 
    let managedObjectContext = delegate.managedObjectContext 

    // Initialize Fetched Results Controller 
    let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedObjectContext, sectionNameKeyPath: nil, cacheName: nil) 

    fetchedResultsController.delegate = self 

    return fetchedResultsController 

}() 

述語がないと、tableviewにはすべてのレコードが正しくソートされます。述部を強制するために2つの行のコメントを外しても、結果はまったく返されません。私のデータセットは、wasExported == 1、wasExported == 0の4つのレコードを持っています... wasExportedはブールですが、NSNumberとしてコアデータに格納されています.....どうしましたか?

答えて

3

述部で間違った書式指定子を使用しています。あなたが欲しい:

let predicate = NSPredicate(format: "wasExported == %d", 0) 

%@はオブジェクトポインタです。 %@の場合、0nilポインターとして解釈されます。

+0

このケースでは違いはありませんが、実際には%ldでなければなりません。http://stackoverflow.com/questions/37073099/invalid-predicate-nil-rhs-for-second-argument -in-nspredicate-formatです。 –