我对开发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
。我试图同时将声明放在两个声明中,并且两个声明都不起作用。
答案 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)
}
这是我的故事板的屏幕截图:
答案 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获取最新的数据源并显示它。
让我知道这是否有效......