Core Data fetch返回一个空数组,但调试显示返回了SQLite行?

时间:2017-08-14 13:52:26

标签: swift xcode sqlite core-data

核心数据中的路线和行程之间存在一对多关系(每次行程必须遵循一条路线,但同一路线上可能会有很多行程)。有40条路线和几千次旅行。

此时路由已经插入并保存了上下文,现在我正在尝试根据id获取路由,以便我可以将它们链接到行程。

for trip in trips {
        let id = Int(trip[0]) ?? 0
        let direction = Int(trip[1]) ?? 0
        let routeId = trip[2]

        let newTrip = NSEntityDescription.insertNewObject(forEntityName: "Trip", into: context)
        let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Route")
        fetchRequest.predicate = NSPredicate(format: "id == %@", routeId)
        do {
            let routes = try context.fetch(fetchRequest)  // 1
            print("\(routes.count) routes")               // 2
            let route = routes[0] as! NSManagedObject
            newTrip.setValue(id, forKey: "id")
            newTrip.setValue(direction, forKey: "direction")
            newTrip.setValue(route, forKey: "route")
        } catch {
            print(error)
        }
    }

第一次通过循环是好的,但在第二次通过我得到一些奇怪的行为。我为核心数据启用了调试,第1行和第2行在控制台中打印以下内容:

CoreData: annotation: total fetch execution time: 0.0026s for 1 rows.
0 routes

所以SQLite Query返回1行,但是当我尝试通过核心数据访问它时,它不存在,所以我的应用程序崩溃了。知道为什么会这样吗?

0 个答案:

没有答案