如何从核心数据中删除对象?
How to delete objects from the Core Data?
在 iOS Notes 应用程序中,您可以看到 UITableView 的单元格!当您点击单元格时,单元格会将数据传递给另一个 UIViewController(例如:DetailViewController)!在 DetailViewController 内部,您可以从数据库中删除这些数据!
所以,我有一个带有 UITableView、Core Data 和 NSFetchedResultsController 的应用程序!我可以使用默认的滑动删除功能从 UITableView 中删除数据!但我不明白,如何从 DetailViewController 中删除它们。如果它传递给 DetailViewController。如果您有任何建议,请告诉我。我对 iOS 开发和 Swift 编程语言也很陌生。
我的 DetailViewController!
import UIKit
导入核心数据
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)
}
您可能将托管对象传递到详细信息 viewController。因此,假设您在名为 'managedObject' 的详细信息 viewController 中引用了此托管对象。我们还假设您有一个名为 'context' 的 NSManagedObjectContext 引用。
删除此对象并保存上下文的代码是:
context.deleteObject(managedObject)
do {
try context.save()
}
catch let error{
NSLog("Unresolved error while saving managedObjectContext: \(error)")
}
删除后,您当然需要一些代码来更新您的用户界面。笔记应用程序显示行中的下一个笔记,但如果需要,您也可以在主屏幕中放松到 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。希望这可以帮助。
在 iOS Notes 应用程序中,您可以看到 UITableView 的单元格!当您点击单元格时,单元格会将数据传递给另一个 UIViewController(例如:DetailViewController)!在 DetailViewController 内部,您可以从数据库中删除这些数据!
所以,我有一个带有 UITableView、Core Data 和 NSFetchedResultsController 的应用程序!我可以使用默认的滑动删除功能从 UITableView 中删除数据!但我不明白,如何从 DetailViewController 中删除它们。如果它传递给 DetailViewController。如果您有任何建议,请告诉我。我对 iOS 开发和 Swift 编程语言也很陌生。
我的 DetailViewController!
import UIKit
导入核心数据
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)
}
您可能将托管对象传递到详细信息 viewController。因此,假设您在名为 'managedObject' 的详细信息 viewController 中引用了此托管对象。我们还假设您有一个名为 'context' 的 NSManagedObjectContext 引用。
删除此对象并保存上下文的代码是:
context.deleteObject(managedObject)
do {
try context.save()
}
catch let error{
NSLog("Unresolved error while saving managedObjectContext: \(error)")
}
删除后,您当然需要一些代码来更新您的用户界面。笔记应用程序显示行中的下一个笔记,但如果需要,您也可以在主屏幕中放松到 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。希望这可以帮助。