在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)
}
答案 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。希望这可以帮助。