2017-08-25 64 views
-1

请帮我:从SWIFT核心数据删除的UITableView的选择的数据3

PersonModel.swift

class PersonModel: NSObject { 

dynamic var name: String? 

override init() { 

} 
init(person: Person) { 
    self.name = person.name 
} 

}

在ViewController.swift文件我已经创建了一个数组“变种peopleList = PersonModel“uiang保存并获取函数我已保存并提取了我的所有数据

以下部分用于从表和核心da中删除特定的选定行数据ta在同一时间。

// MARK: - UITableViewDataSource

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 
    // let deletePerson = PersonModel() 
    if editingStyle == .delete { 
     let deletePersonData = peopleList[indexPath.row] 

     PersonServices.sharedInstance.deletePerson(deletePersonData) 
     peopleList.remove(at: indexPath.row) 
     tableView.deleteRows(at: [indexPath], with: .fade) 
    } 

tableView.reloadData() 
} 

PersonServices.swift

class PersonServices: BusinessClass { 
static var sharedInstance = PersonServices() 

func deletePerson(deletePersonData)-> [PersonModel] { 

    var personModels = [PersonModel](); 

    let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: PersonEntity) 
    // let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: PersonEntity) 
    let predicates = NSPredicate(format: "name == %@", "PeopleList[index]") 
    fetchRequest.predicate = predicates 



    let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest as! NSFetchRequest<NSFetchRequestResult>) 

    do { 

     try managedObjectContext.execute(deleteRequest) 

    } catch let error as NSError { 
     print("Could not save \(error), \(error.userInfo)") 
    } 
    } 

,但我不能这样做that.please帮助我..

+0

是你的问题解决了吗? – 3stud1ant3

+0

是的,解决了这个问题。见下图。 – salma209

回答

0

试试这个代码: `

let managedContext = appDelegate.managedObjectContext 
       let OBJECT_Remove = self.ARRAY[Object_TO_Remove] 
       managedContext.delete(watchList) 
       do { 
        try managedContext.save() 

       } catch let error as NSError { 
        print("Could not save. \(error), \(error.userInfo)") 
       } 
       self.ARRAY.remove(Object_TO_Remove) 
       self.tableView.reloadData() 

` 希望这适用于你

2

我已经改变了我的函数的参数类型。并且我已将appdelegate file.so中的核心数据的代码分隔开来,因此无需每次都使用这个“let managedContext = appDelegate.managedObjectContext let OBJECT_Remove = self.ARRAY [Object_TO_Remove]” 语句。

变化ViewController.swift为deletePerson的函数调用参数:

PersonServices.sharedInstance.deletePerson(deletePersonData: deletePersonData) 

BussinessClass.swift

import UIKit 

import CoreData 

class BusinessClass: NSObject { 

lazy var managedObjectContext: NSManagedObjectContext = { 

    let container = NSPersistentContainer(name: "HitList") 
    // Declare Options 
    let options = [ NSMigratePersistentStoresAutomaticallyOption : true, NSInferMappingModelAutomaticallyOption : true ] 

    container.loadPersistentStores(completionHandler: { (storeDescription, error) in 
     if let error = error as NSError? { 

      fatalError("Unresolved error \(error), \(error.userInfo)") 
     } 
    }) 


    return container.viewContext 
}() 



// MARK: - Core Data Saving support 

func saveContext() { 
    let context = managedObjectContext 
    if context.hasChanges { 
     do { 
      try context.save() 
     } catch { 

      let nserror = error as NSError 
      fatalError("Unresolved error \(nserror), \(nserror.userInfo)") 
     } 
    } 
} 

}改变了NSPredicate的语法。 NSPredicate就像查询语法。

func deletePerson(deletePersonData: PersonModel) { 

    let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: PersonEntity) 

    let predicates = NSPredicate(format: "name == %@", deletePersonData.name!) 

    fetchRequest.predicate = predicates 

    let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest as! NSFetchRequest<NSFetchRequestResult>) 

    do { 

     try managedObjectContext.execute(deleteRequest) 


    } catch let error as NSError { 
     print("Could not save \(error), \(error.userInfo)") 
    } 

}