我有一个关于Swift核心数据更新的简单问题。
以下代码为每次保存创建新记录。为什么??? 如果User表中没有数据,并且存在数据更新,则应创建新条目。
我的用户表应只保留一条记录
@IBAction func btnSave(){
var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
var context:NSManagedObjectContext = appDel.managedObjectContext!
var newUser = NSEntityDescription.insertNewObjectForEntityForName("User", inManagedObjectContext: context) as NSManagedObject
var request = NSFetchRequest( entityName: "User")
// request.returnsObjectsAsFaults = false
var results:NSArray = context.executeFetchRequest(request , error: nil)!
//Upate the firste record
if(results.count != 0 ){
var res = results[0] as NSManagedObject
res.setValue(firstName.text, forKey: "firstName")
res.setValue(lastName.text, forKey: "lastName")
res.setValue(address.text, forKey: "address")
res.setValue(postal.text, forKey: "postal")
res.setValue(city.text, forKey: "city")
res.setValue(lblUUID.text, forKey: "savedUUID")
lblUUID.text = String(results.count) // used for debug -- show numbers of records in array
context.save(nil)
println("Update")
}else{
// Create new record if array has nil records
newUser.setValue(firstName.text, forKey: "firstName")
newUser.setValue(lastName.text, forKey: "lastName")
newUser.setValue(address.text, forKey: "address")
newUser.setValue(postal.text, forKey: "postal")
newUser.setValue(city.text, forKey: "city")
newUser.setValue(lblUUID.text, forKey: "savedUUID")
context.save(nil)
println("New registration")
}
答案 0 :(得分:2)
在获取并检查用户是否已存在之前,请调用以下代码行:
var newUser = NSEntityDescription.insertNewObjectForEntityForName("User", inManagedObjectContext: context) as NSManagedObject
每次调用 btnSave()时都会创建新用户。
因此,为了解决此问题,您需要将上面的代码移到 if else 语句中。
if(results.count != 0 ){
...
} else {
var newUser = NSEntityDescription.insertNewObjectForEntityForName("User", inManagedObjectContext: context) as NSManagedObject
...
}
在此修改之后,您的代码将按预期工作。