在我的tableViewController中,我有以下内容.我试图删除一个项目工作.
var myData: Array<AnyObject> = []
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cellID: NSString = "Cell"
var Cell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier(cellID) as UITableViewCell
var data: NSManagedObject = myData[indexPath.row] as NSManagedObject
Cell.textLabel?.text = data.valueForKeyPath("Name") as? String
return Cell
}
Run Code Online (Sandbox Code Playgroud)
然后尝试删除我有.
override func tableView(tableView: (UITableView!), commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete {
let cellID: NSString = "Cell"
var Cell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier(cellID) as UITableViewCell
var data: NSManagedObject = myData[indexPath.row] as NSManagedObject
data.delete(0)
// Delete the row from the data source
//tableView!.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
} else if editingStyle == .Insert {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}
Run Code Online (Sandbox Code Playgroud)
Mwc*_*Mac 62
在swift和coredata中执行删除数据时更新我的编码问题.这个代码我最终得到了它.
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
switch editingStyle {
case .Delete:
// remove the deleted item from the model
let appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let context:NSManagedObjectContext = appDel.managedObjectContext!
context.deleteObject(myData[indexPath.row] as NSManagedObject)
myData.removeAtIndex(indexPath.row)
context.save(nil)
//tableView.reloadData()
// remove the deleted item from the `UITableView`
self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
default:
return
}
}
Run Code Online (Sandbox Code Playgroud)
编辑上面的Swift 2.2和Xcode 7.3.1
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
switch editingStyle {
case .Delete:
// remove the deleted item from the model
let appDel:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let context:NSManagedObjectContext = appDel.managedObjectContext
context.deleteObject(myData[indexPath.row] )
myData.removeAtIndex(indexPath.row)
do {
try context.save()
} catch _ {
}
// remove the deleted item from the `UITableView`
self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
default:
return
}
}
Run Code Online (Sandbox Code Playgroud)
还需要纠正这两行代码.
var myData: Array<AnyObject> = []
let managedObjectContext = (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext
Run Code Online (Sandbox Code Playgroud)
Ash*_*k R 11
Swift 3.0
下面是删除项目和重新加载数据的代码.
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
let noteEntity = "Note" //Entity Name
let managedContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let note = notes[indexPath.row]
if editingStyle == .delete {
managedContext.delete(note)
do {
try managedContext.save()
} catch let error as NSError {
print("Error While Deleting Note: \(error.userInfo)")
}
}
//Code to Fetch New Data From The DB and Reload Table.
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: noteEntity)
do {
notes = try managedContext.fetch(fetchRequest) as! [Note]
} catch let error as NSError {
print("Error While Fetching Data From DB: \(error.userInfo)")
}
noteTableView.reloadData()
}
Run Code Online (Sandbox Code Playgroud)
要完成zisoft的答案:
删除对象后需要保存上下文.
所以正确的方法是:
// get your app managemenent context
let appDel:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
let context = self.appDel.managedObjectContext!
// remove your object
context.del(data)
// save your changes
context.save(nil)
Run Code Online (Sandbox Code Playgroud)
注意首先检查是否有任何删除规则(如果您有任何相关对象)
| 归档时间: |
|
| 查看次数: |
56691 次 |
| 最近记录: |