小编Bre*_*ley的帖子

使用Core Data插入/更新记录的最有效方法?

我正在开发一个定期从服务器下载数据的应用程序.如果数据需要更新,我会使用类似的内容来更新记录或插入新记录(如果它们不存在).

let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Trip")
    for csvTrip in csvTrips {
        var trip: NSManagedObject!

        let tripId = Int(csvTrip[0])!
        fetchRequest.predicate = NSPredicate(format: "id = %d", tripId)

        if (context.count(for: fetch) == 0) {
            trip = NSEntityDescription.insertNewObject(forEntityName: "Trip", into: context)
            trip.setValue(tripId, forKey: "id")
        } else {
            tripObject = (context.fetch(fetch) as! [NSManagedObject])[0]
        }

        // Set other properties
    }
Run Code Online (Sandbox Code Playgroud)

检查实体是否已存在于每个循环中使得它比仅插入它们大约慢100倍而不进行检查,这对于超过几千个实体来说变成了一个大问题.我已经尝试首先获取所有实体,但我仍然必须循环遍历每个实体并将id添加到数组或其他东西,这不是更快.我知道核心数据与MySQL不同,但我很难相信没有类似INSERT ...... ON DUPLICATE KEY UPDATE的功能,这在MYSQL中非常快.我错过了什么吗?

core-data ios swift

2
推荐指数
2
解决办法
1686
查看次数

标签 统计

core-data ×1

ios ×1

swift ×1