gpt4 book ai didi

ios - Swift:删除核心数据,表不会更新

转载 作者:行者123 更新时间:2023-11-29 01:16:03 25 4
gpt4 key购买 nike

此代码似乎正在删除实际数据,但没有行,表不会更新,除非我强制关闭应用程序并重新打开。提前致谢。

导入 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")
}
}

最佳答案

您可以使用 NSFetchedResultsController 类及其 NSFetchedResultsControllerDelegate 协议(protocol)方法。然后您可以非常轻松地更新、删除、插入或移动对象!

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

关于ios - Swift:删除核心数据,表不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35166247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com