核心数据更新代码使用Swift复制记录

时间:2015-03-23 19:51:03

标签: ios swift core-data

我有一个关于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")
    }

1 个答案:

答案 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
...
}

在此修改之后,您的代码将按预期工作。