代码之家  ›  专栏  ›  技术社区  ›  J. Doe

如何在Swift中有效地将20K个对象保存到CoreData中?

  •  0
  • J. Doe  · 技术社区  · 7 年前

    我想知道是否有一种有效的方法可以将20000个对象保存到CoreData中。目前拯救他们需要2分钟左右,如果我能让它更快的话,那就太好了。

    现在我用下一种方法来节省开支:

    for serverCar in serverCars {
        let dbObjectCar = DBObjectCar.createWithAttributes(["carNbr" : serverCar.carNbr! as AnyObject], context: context) as DBObjectCar
        self.handleCar(serverCar: serverCar, dbObjectCar: dbObjectCar, defaultContext: context)
    }
    

    哪里

    class func createWithAttributes(_ attributes: [String : AnyObject], context: NSManagedObjectContext = DBContext.defaultContext) -> Self {
        let object = create(context: context)
        if attributes.count > 0 {
            object.setValuesForKeys(attributes)
        }
        return object
    }
    

    create 方法是:

    class func create(context: NSManagedObjectContext = DBContext.defaultContext) -> Self {
        let entityDescription = NSEntityDescription.entity(forEntityName: entityName, in: context)
        let object = self.init(entity: entityDescription!, insertInto: context)
    
        return object 
    }
    

    和

    fileprivate func handleCar(serverCar: ServerCar, dbObjectCar: DBObjectCar, defaultContext: NSManagedObjectContext) {
        _ = Mapper.Map(serverCar, dbo: dbObjectCar, context: defaultContext)
    }
    

    Mapper 是:

    class func Map(_ serverCar: ServerCar, dbObjectCar: DBObjectCar, context : NSManagedObjectContext) -> DBObjectCar {
        if let carNbr = serverCar.carNbr {
            serverCar.setValue(carNbr, forKey: "carNbr")
        }
    
        return serverCar
    }
    

    open class DBObjectCar: NSManagedObject { ... }
    struct ServerCar : JSON { ... }
    

    所以对我来说主要的问题是,我怎样才能更快地节省20000个汽车对象?我将非常感谢你的回答! 如果你有任何问题-请问我,也许我忘了提到什么或分享我的一些代码片段。

    0 回复  |  直到 7 年前