如何从Core Data中删除对象?

时间:2016-01-14 02:06:50

标签: ios swift core-data nsfetchedresultscontroller

在iOS Notes应用程序中,您可以看到UITableView的单元格!当你点击单元格,并且单元格正在将数据传递给另一个UIViewController(例如:DetailViewController)!在DetailViewController内部,您可以从数据库中删除此数据!

所以,我有一个带有UITableView,Core Data和NSFetchedResultsController的应用程序!我可以使用默认的滑动删除功能从UITableView删除数据!但我不明白,如何从DetailViewController中删除它们。如果它被传递给DetailViewController。如果您有任何建议请告诉我。我对iOS开发和Swift编程语言也很陌生。

我的DetailViewController!

import UIKit

导入CoreData

class DetailViewController:UIViewController {

@IBOutlet weak var containerLabel: UILabel!

var retrieveData:NSManagedObject!
var managedObjectContext:NSManagedObjectContext!

override func viewDidLoad() {
    super.viewDidLoad()
// Do any additional setup after loading the view.

if let demo = self.retrieveData.valueForKey("titleField") as? String {
     self.containerLabel.text = demo
    }
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@IBAction func backToMain(sender: AnyObject) {
    // Back to the MainTableViewController
    self.dismissViewControllerAnimated(true, completion: nil)
}
@IBAction func trashButton(sender: AnyObject) {

    self.managedObjectContext.deleteObject(retrieveData)

    do {
    try self.managedObjectContext.save()
    } catch {

    }
    self.dismissViewControllerAnimated(true, completion: nil)


}

1 个答案:

答案 0 :(得分:1)

您可能已将托管对象传递给详细视图控制器。因此,假设您在详细viewController中引用了一个名为“managedObject”的托管对象。我们还假设您有一个名为“context”的NSManagedObjectContext的引用。

删除此对象并保存上下文的代码是:

context.deleteObject(managedObject)
do {
    try context.save()
    }
    catch let error{
    NSLog("Unresolved error while saving managedObjectContext: \(error)")
 }

删除后,您当然需要一些代码来更新您的用户界面。 notes应用程序显示行中的下一个音符,但如果需要,您还可以在主屏幕中放松到UITableView。

UITableView控制器必须通过实现一些将更新tableView的委托方法来采用NSFetchedResultsControllerDelegate协议。您删除了一个对象,因此必须通知tableView,以便它可以删除该对象所在的行。您可以在此处或网络上的其他位置找到大量信息,如何执行此操作。检查NSFetchedResultsControllerDelegate的协议参考。

编辑:如果你想要传递你的上下文和对象,你需要这样的东西:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if segue.identifier == "yourSegueIdentifier"{

        if let destinationVC = segue.destinationViewController as? YourCustomVC{

       destinationVC.context = yourContextObject
       destinationVC.managedObject = yourManagedObject
       //pass over other data...

         }
     }
}

在传递相关对象之后,您可以使用给定的代码从上下文中删除managedObject。希望这可以帮助。