How to update existing object in core data ? [Swift]

后端 未结 3 1046
广开言路
广开言路 2020-12-21 08:49

I have preloaded data from a .csv file into coredata. I am fetching the data in the following way

var places:[Places] = []

in viewDi

相关标签:
3条回答
  • 2020-12-21 08:56

    Your current code is:

    if let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext {
    
                let place : Places = Places()
                place.isFavourite = cell.isFavouriteLabel.text
                 do{
                    try managedObjectContext.save()
                } catch let error as NSError{
                    print(error)
    
                }
              }
    

    That would create a new place (if it worked), but you need to update an existing one.

    You have the places returned from managedObjectContext.executeFetchRequest.

    So you need to get something like places[index_of_the_cell_in_question].isFavourite = cell.isFavouriteLabel.text

    and then managedObjectContext.save().

    0 讨论(0)
  • 2020-12-21 09:06

    Use the save function of the NSManagedObjectContext:

    places.isFavourite = cell.isFavoriteLabel.text
    
    var error: NSError?
    if managedObjectContext.save(&error) != true {
        // Error
    }
    
    0 讨论(0)
  • 2020-12-21 09:14

    This is simple as this:

    • Find the entry you want to modify in places then save the core data context.

      func saveContext () {
          if let moc = self.managedObjectContext {
              var error: NSError? = nil
              if moc.hasChanges && !moc.save(&error) {
                  // Replace this implementation with code to handle the error appropriately.
                  // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
                  println("Unresolved error \(error), \(error!.userInfo)")
                  abort()
              }
          }
      }
      

    I suggest you used a manager to insert, fetch and delete entry in your core data.

    import Foundation
    import CoreData
    
    class CoreDataHelper: NSObject {
    
        class var shareInstance:CoreDataHelper {
            struct Static {
                static let instance:CoreDataHelper = CoreDataHelper()
            }
            return Static.instance
        }
    
        //MARK: - Insert -
        func insertEntityForName(entityName:String) -> AnyObject {
            return NSEntityDescription.insertNewObjectForEntityForName(entityName, inManagedObjectContext: self.managedObjectContext!)
        }
    
        //MARK: - Fetch -
        func fetchEntitiesForName(entityName:String) -> NSArray {
            ...
        }
    
        //MARK: - Delete -
        func deleteObject(object:NSManagedObject) {
            self.managedObjectContext!.deleteObject(object)
        }
    
        // MARK: - Core Data Saving support -
        func saveContext () {
            if let moc = self.managedObjectContext {
                var error: NSError? = nil
                if moc.hasChanges && !moc.save(&error) {
                    // Replace this implementation with code to handle the error appropriately.
                    // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
                    println("Unresolved error \(error), \(error!.userInfo)")
                    abort()
                }
            }
        }
    

    Hop this can help you

    0 讨论(0)
提交回复
热议问题