2017-08-25 35 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)") 
    } 

}