2016-05-16 124 views
0

我有以下代码从核心数据中获取结果以填充tableview。谓词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会填充正确排序的所有记录。如果不注释两条线来使谓词生效,则根本没有结果。我的数据集有4条记录,其中wasExported == 1和3与wasExported == 0 ... wasExported是一个布尔值,但是在核心数据中它存储为NSNumber .....我做了什么错了?

回答

3

您在谓词中使用了错误的格式说明符。你想:

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

%@是用于对象指针。用%@0被解释为nil指针。

+0

它在这种特殊情况下没有什么区别,但实际上它应该是'%ld',比较http://stackoverflow.com/questions/37073099/invalid-predicate-nil-rhs-for-second-argument -in-nspredicate格式。 –