在我的应用程序中,我使用了核心数据,并在按下 uitableview 单元格的按钮时删除或取消固定该值。
所以在点击按钮时,我想设置该索引的值。
这是我的代码:
在cellforrow at index path方法
cell.pinButton.tag = indexPath.row
cell.pinButton.addTarget(self, action: #selector(MessageViewController.buttonDeletePressed(_:)), forControlEvents: UIControlEvents.TouchUpInside)
cell.btnpinUnpin.tag = indexPath.row
cell.btnpinUnpin.addTarget(self, action: #selector(MessageViewController.buttonPinPressed(_:)), forControlEvents: UIControlEvents.TouchUpInside)
这些都是函数
func buttonDeletePressed(sender:UIButton) {
// let index = sender.tag
// print(index)
// let feedId = person?.valueForKey("feed_id")?.objectAtIndex(index)
// deleteFeed(feedId! as! String)
let index = sender.tag
// print(index)
moc.deleteObject(people[index] as NSManagedObject)
people.removeAtIndex(index)
let _ : NSError! = nil
do {
try moc.save()
self.feedTable.reloadData()
} catch {
print("error : \(error)")
}
}
func buttonPinPressed(sender:UIButton) {
// let index = sender.tag
// print(index)
// let feedId = person?.valueForKey("feed_id")?.objectAtIndex(index)
// deleteFeed(feedId! as! String)
let index = sender.tag
// print(index)
// moc.deleteObject(people[index] as NSManagedObject)
if (person?.valueForKey("isPin") as! String == "1")
{
person?.setValue("0", forKey: "isPin")
}
else
{
person?.setValue("1", forKey: "isPin")
}
// people.removeAtIndex(index)
let _ : NSError! = nil
do {
try moc.save()
self.feedTable.reloadData()
} catch {
print("error : \(error)")
}
}
通过这个我可以正确地删除整个对象。但是,当我每次选择最后一个值时,我都会在图钉按钮上贴上胶带。原因是我无法为该 nsmanagedobject 设置索引。那么我该怎么做呢?
最佳答案
你缺少 person = people[index]
但是,您真正的问题是您正在使用标签,这会迫使您一直重新加载表格,否则很多标签在删除后都是错误的。
还建议使用 FRC 作为数据源,然后您可以动画化您的更新。
为了实现这一点,您需要创建一个自定义单元格类,这样您就可以向它传递比标记值更好的东西。这可能是托管对象本身(不理想),对象是托管对象的(更好),或不同的类,如 View 模型,它知道按下按钮时要做什么(并且可以为也显示单元格)(最好)。
关于ios - 如何为 CoreData 中的特定索引设置值。 iOS swift ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37628119/