humans
humans

Reputation: 659

SWIFT: Updating an existing core data object

I've been creating a project just to mess around with core data to help myself learn it, but I've come to the part of every project where I just simply can't figure this out, here it is- I am trying to create a UIAlert window, that calls the update name function I've written, that a user can enter a new name and hit update, seems easy enough, and I've got the code I need, minus one tiny piece.

I will post my code, but the error I'm getting is "Cannot convert value of type 'String' to expected argument type 'NameObject'", which I understand, my NameObject class is of type NSManagedObject, I just am not sure where I went wrong or what to do.

class NameObject: NSManagedObject {
static let entityName = "Person"
@NSManaged var name: String?}`class NameObject: NSManagedObject {
static let entityName = "Person"
@NSManaged var name: String? }

Here is my update function

func updateName(index: Int, newName: NameObject){
    //1
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    // 2
    peoples[index].name = newName.name
    appDelegate.saveContext()

}

It totally works fine, as far as I know.


Here is my code for the UIAlert,

@IBAction func updateNameButton(sender: AnyObject, indexPath: NSIndexPath) {
        //customCell().updateNameAlert()

    func updateNameAlert(){
        let alert = UIAlertController(title: "Update",
                                      message: "Please enter the new name.",
                                      preferredStyle: .Alert)
        // 1
        let updateAction = UIAlertAction(title: "Save",
                                         style: .Default){(_) in
                                            let nameTextField = alert.textFields![0]

Here is where I am having my issue:


            self.updateName(indexPath.row, newName:(nameTextField.text!)) //Issue
            self.tableView.reloadData()
        }

        // 2
        let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)

        alert.addTextFieldWithConfigurationHandler(nil)
        alert.addAction(updateAction)
        alert.addAction(cancelAction)

        // 3
        self.presentViewController(alert, animated: true, completion: nil)
    }
}

If any further information is wanted let me know; I am glad to provide it if it helps.

Upvotes: 4

Views: 9131

Answers (1)

vadian
vadian

Reputation: 285064

Just change the signature to take a string for parameter newName,
that's what the error message says.

func updateName(index: Int, newName: String){
   let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
   peoples[index].name = newName
   appDelegate.saveContext()

}

Upvotes: 5

Related Questions