如何在 Swift 中从数据库中保存和获取一个对象?

Posted

技术标签:

【中文标题】如何在 Swift 中从数据库中保存和获取一个对象?【英文标题】:How to save and fetch one Object from Database in Swift? 【发布时间】:2014-11-18 12:03:06 【问题描述】:

我有一个方法可以将对象保存到数据库中。按照逻辑,只要有网络,就会从服务器下载保存对象。方法如下。

func saveConfiguration (config : ConfigDao)

        let entity = NSEntityDescription.entityForName("AppConfig", inManagedObjectContext:self.del.managedObjectContext!)

        let configurationContext = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: self.del.managedObjectContext!) as AppConfig

        configurationContext.categoriesVer = Int32(config.categoriesVer)
        configurationContext.fireBallIp = config.fireBallIP
        configurationContext.fireBallPort = Int32(config.fireBallPort)
        configurationContext.isAppManagerAvailable = config.isAppManagerAvailable
        configurationContext.isFireBallAvailable = config.isFireballAvailable
        configurationContext.timePerQuestion = config.timePerQuestion


    

问题是这会添加所有对象,而不是替换它,所以我的第一个查询是

“如何在DB中只添加一个对象并在下一个对象到来时替换?”

我也想检索同一个对象,唯一的一个对象,通常在数组中,我确实获取最后一个索引,但是我怎样才能只保存一个并在数据库中获取相同的对象。

func fetchAppConfig() -> AppConfig 

        var fetchRequest =  NSFetchRequest (entityName: "AppConfig")

        var error : NSError?
        let fetchResults = del.managedObjectContext?.executeFetchRequest(fetchRequest, error: &error) as [NSManagedObject]

        if error != nil 
            println ("Error \(error)")
        

        return  fetchResults
    

谢谢。

【问题讨论】:

【参考方案1】:

你可以这样做。

//只存储一个对象,

func saveConfiguration (config : ConfigDao)

        let entity = NSEntityDescription.entityForName("AppConfig", inManagedObjectContext:self.del.managedObjectContext!)
        var fetchRequest =  NSFetchRequest (entityName: "AppConfig")

        if let fetchResults = del.managedObjectContext!.executeFetchRequest(fetchRequest, error: nil) as? [AppConfig] 
            for ob: AppConfig in fetchResults
            
                println("Delete object,,, ")
                self.del.managedObjectContext?.deleteObject(ob as AppConfig)
            
            self.del.saveContext()
        

        let configurationContext = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: self.del.managedObjectContext!) as AppConfig

        configurationContext.categoriesVer = Int32(config.categoriesVer)
        configurationContext.fireBallIp = config.fireBallIP
        configurationContext.fireBallPort = Int32(config.fireBallPort)
        configurationContext.isAppManagerAvailable = config.isAppManagerAvailable
        configurationContext.isFireBallAvailable = config.isFireballAvailable
        configurationContext.timePerQuestion = config.timePerQuestion

        del.saveContext()

    // end of the

//在零索引处获取对象。这将只有一个,但您仍然可以使用 0 索引来确定。

func fetchAppConfig() -> AppConfig 

        var appConfig:AppConfig = AppConfig()

        var fetchRequest =  NSFetchRequest (entityName: "AppConfig")

        var error : NSError?
        if let fetchResults = del.managedObjectContext!.executeFetchRequest(fetchRequest, error: nil) as? [AppConfig] 

            if error != nil 
                println ("Error \(error)")
            
            appConfig = fetchResults[0]
        

        return appConfig
    

【讨论】:

以上是关于如何在 Swift 中从数据库中保存和获取一个对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 swift 3 中从核心数据中删除对象

如何在 Swift 中从 NSDate 获取日、月和小时

如何在 Swift 中从 Facebook 获取用户名

如何在 swift 中从两天中获取日期名称

在 Swift Core Data 中从一对多关系中获取对象

如何在 Swift 中从蓝牙特性中获取数据