2016-01-14 36 views
1

在iOS Notes应用程序中,您可以看到UITableView的单元格!当你点击单元格时,单元格将数据传递给另一个UIViewController(例如:DetailViewController)!在DetailViewController里面,你可以从数据库中删除这些数据!如何从核心数据中删除对象?

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

我的DetailViewController!

import UIKit 

进口CoreData

类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

你可能通过你的管理对象到细节的viewController。假设您在详细视图控制器中引用了此托管对象,名为'managedObject'。我们还假设你有一个名为'context'的NSManagedObjectContext的引用。

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

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

删除后,你当然需要一些代码来更新您的用户界面。笔记应用程序显示该行中的下一个笔记,但如果需要,还可以展开到主屏幕中的UITableView。

UITableView控制器必须通过实现一些将更新tableView的委托方法来采用NSFetchedResultsControllerDelegate协议。您删除了一个对象,因此必须通知tableView,以便它可以删除该对象所在的行。您可以在此处或Web上的其他位置找到许多信息,以了解如何执行此操作。检查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 。希望这可以帮助。

+0

我已经完全完成了一个NSFetchedResultsControllerDelegate协议方法。我已经使用prepareForSegue方法将数据传递给另一个viewController。 –

+0

我有财产 –

+0

我不明白;( –

相关问题