如何在 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 中从数据库中保存和获取一个对象?的主要内容,如果未能解决你的问题,请参考以下文章