删除列表后,UITableView将不会刷新。 self.tableView.reloadData()也不起作用

时间:2016-01-21 06:37:56

标签: ios swift uitableview tableview

我对开发Swift和iOS相对较新,但对代码并不陌生。我对桌面视图感到有些恼火。

我曾多次尝试使用self.tableView.reloadData(),但无济于事。我也试过

async call dispatch_async(dispatch_get_main_queue()) {
   self.tableView.reloadData()
} 

但是这也不想工作。我会发布功能,以便有人可以启发我在哪里蠢蠢欲动。我非常感谢你的帮助。

@IBAction func clearList(sender: AnyObject) {
    let alert = UIAlertController(title: "Clear List?",
    message: "Are you sure you want to clear the list?",
    preferredStyle: .Alert)

    let yesClearAction = UIAlertAction(title: "Yes", style: .Default, handler: { (action:UIAlertAction) -> Void in
    self.clearListNow("GroceryList")

    })

    let noClearAction = UIAlertAction(title: "No", style: .Default, handler: { (action:UIAlertAction) -> Void in
        //do nothing aka don't clear list
    })
    alert.addAction(yesClearAction)
    alert.addAction(noClearAction)

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

    self.tableView.reloadData() 
}

以防万一有人想看看clearListNow做了什么......

func clearListNow(entity: String) {
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let managedContext = appDelegate.managedObjectContext
    let fetchRequest = NSFetchRequest(entityName: "GroceryList")
    fetchRequest.returnsObjectsAsFaults = false

    do
    {
        let results = try managedContext.executeFetchRequest(fetchRequest)
        for managedObject in results
        {
            let managedObjectData:NSManagedObject = managedObject as! NSManagedObject
            managedContext.deleteObject(managedObjectData)
        }
    } catch let error as NSError {
      print("Detele all data in \(entity) error : \(error) \(error.userInfo)")
    }
}

我还尝试在self.tableView.reloadData()函数中使用clearListNow。我试图同时将声明放在两个声明中,并且两个声明都不起作用。

3 个答案:

答案 0 :(得分:1)

使用时重新加载tableView,在警报中按是,如下面的代码所示:

let yesClearAction = UIAlertAction(title: "Yes", style: .Default, handler: { (action:UIAlertAction) -> Void in

      self.clearListNow("GroceryList")
      self.tableView.reloadData() 

})

答案 1 :(得分:0)

尝试在yesClearAction中重新加载数据 你应该有类似的东西:

var varname="ram & shyam";
var varage=18;

var newvarname=varname.replace("&","%26");
var datastring='name='+newvarname+'&age='+varage;

让我知道这是否有效! :)

<强>更新

我已经完成了这段代码,它对我来说很好用

 @IBAction func clearList(sender: AnyObject) {
  let alert = UIAlertController(title: "Clear List?",
  message: "Are you sure you want to clear the list?",
  preferredStyle: .Alert)

  let yesClearAction = UIAlertAction(title: "Yes", style: .Default, handler: {(action:UIAlertAction) -> Void in
  self.clearListNow("GroceryList")
  self.tableView.reloadData()
})

let noClearAction = UIAlertAction(title: "No", style: .Default, handler: { (action:UIAlertAction) -> Void in
  //do nothing aka don't clear list
 })
alert.addAction(yesClearAction)
alert.addAction(noClearAction)
presentViewController(alert, animated: true, completion: nil) 
}

这是我的故事板的屏幕截图:

enter image description here

答案 2 :(得分:0)

根据您当前的代码,在AlertView出现后的TableView Reload 所以,tableView DataSource(Array)没有改变,tableview显示数据源(数组)数据。

尝试在

之后重新登记表格
self.clearListNow("GroceryList")

self.clearListNow("GroceryList")
self.tableView.reloadData()

进入func clearListNow(entity:String)

循环后

 即

for managedObject in results
{
let managedObjectData:NSManagedObject = managedObject as! NSManagedObject
managedContext.deleteObject(managedObjectData)
}
self.tableView.reloadData()

所以tableview获取最新的数据源并显示它。

让我知道这是否有效......