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

时间:2014-11-18 12:03:06

标签: ios database core-data swift

我有一个将Object保存到数据库的方法。根据逻辑,每当有互联网时,它将通过从服务器下载来保存对象。方法如下。

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中只添加一个对象,并在下一个Object到来时替换?”

我也想要检索相同的对象,唯一的一个对象,通常在数组中,我会获取最后一个索引,但是如何只保存一个并在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 个答案:

答案 0 :(得分:8)

您可以执行以下操作。

//仅用于存储一个对象

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
    }