【问题标题】:Swift: Deleting core data, table won't updateSwift:删除核心数据,表不会更新
【发布时间】:2016-02-03 23:01:19
【问题描述】:

此代码似乎可以删除实际数据,但是除非我强制关闭应用程序并重新打开,否则表格不会在没有行的情况下更新。 提前致谢。

导入 UIKit 导入核心数据

类 ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {

var lists = [NSManagedObject]()
var deleteListIndexPath: NSIndexPath? = nil

@IBOutlet weak var myTableView: UITableView!

@IBAction func addItem(sender: AnyObject) {
    let alert = UIAlertController(title: "New List", message: "Add a new list", preferredStyle: .Alert)

    let saveAction = UIAlertAction(title: "Save", style: .Default) { (UIAlertAction) -> Void in

        let textField = alert.textFields![0] as UITextField
        if textField != "" {

          self.saveItem(textField.text!)
          self.myTableView.reloadData()
        }

       }


    let cancelAction = UIAlertAction(title: "Cancel", style: .Default, handler: nil)
    alert.addTextFieldWithConfigurationHandler(nil)
    alert.addAction(saveAction)
    alert.addAction(cancelAction)

    presentViewController(alert, animated: true, completion: nil)
}



func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
    return lists.count
}


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    let myCell:UITableViewCell = myTableView.dequeueReusableCellWithIdentifier("Prototype1")!

    let list = lists[indexPath.row]
    print(lists[indexPath.row])
    myCell.textLabel?.text = list.valueForKey("listTitle") as? String


    return myCell
}



override func viewDidLoad() {
    super.viewDidLoad()

   self.myTableView.dataSource = self
   self.myTableView.delegate = self

    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let managedContext = appDelegate.managedObjectContext

    let fetchRequest = NSFetchRequest(entityName:"List")

    // you may need to sort the list
    let sortDescriptor1 = NSSortDescriptor(key: "listTitle", ascending: true)
    let sortDescriptors = [sortDescriptor1]
    fetchRequest.sortDescriptors = sortDescriptors

    var fetchedResults : [NSManagedObject] = []

    do
    {
        fetchedResults = try managedContext.executeFetchRequest(fetchRequest) as! [NSManagedObject]
    }
    catch
    {
        return
    }

    for list in fetchedResults
    {
        lists.append(list)
    }

    self.myTableView.reloadData()

}


func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
    return true
}

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if(editingStyle == .Delete ) {
        // Find the LogItem object the user is trying to delete
        let logItemToDelete = lists[indexPath.row]
        let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        let managedContext = appDelegate.managedObjectContext

        managedContext.deleteObject(logItemToDelete)
        self.myTableView.reloadData()


    }
}






func saveItem(Saveitem: String)
{
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

    let managedContext = appDelegate.managedObjectContext

    let entity = NSEntityDescription.entityForName("List", inManagedObjectContext: managedContext)
    let item = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedContext)

    item.setValue(Saveitem, forKey: "listTitle")

    do {
        try managedContext.save()
        lists.append(item)


    }
    catch {
        print("Error")
    }
}

}

【问题讨论】:

    标签: ios swift uitableview core-data


    【解决方案1】:

    您可以将NSFetchedResultsController 类与他们的NSFetchedResultsControllerDelegate 协议方法一起使用。然后您可以非常轻松地更新、删除、插入或移动对象!

    如果您的 tableView 没有更新?你可以使用viewDidAppear函数。

    【讨论】:

      【解决方案2】:

      我认为您仍然需要从列表对象中删除“logItem”。

      lists.removeAtIndex(indexPath.row)
      

      如果你在tableview数据源协议上传这个函数的代码,我可以给你一个更准确的答案:

      override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)
      

      【讨论】:

      • 没关系,在索引处删除效果很好!谢谢
      猜你喜欢
      • 2020-12-12
      • 2020-01-09
      • 2016-10-27
      • 2014-08-30
      • 2020-05-30
      • 2019-06-19
      • 2015-09-09
      • 2017-03-20
      • 1970-01-01
      相关资源
      最近更新 更多