如何为 CoreData 中的特定索引设置值。 iOS 斯威夫特

Posted

技术标签:

【中文标题】如何为 CoreData 中的特定索引设置值。 iOS 斯威夫特【英文标题】:how to set value for perticular index in CoreData. iOS Swift 【发布时间】:2016-06-04 08:29:45 【问题描述】:

在我的应用程序中,我使用了核心数据,并在按下 uitableview 单元格的按钮时删除或取消固定值。

所以在单击按钮时,我想设置该索引的值。

这是我的代码:

在cellforrow中的索引路径方法

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)")
    


这样我可以正确删除整个对象。但是,当我每次选择最后一个值时,我都会在 pin 按钮上粘贴。原因是我无法为该 nsmanagedobject 设置索引。那么我该怎么做呢?

【问题讨论】:

【参考方案1】:

你错过了person = people[index]

但是,您真正的问题是您正在使用标签,这会迫使您一直重新加载表格,因为否则很多标签在删除后都是错误的。

还建议使用 FRC 作为数据源,然后您可以为更新设置动画。

为了实现这一点,您将创建一个自定义单元格类,以便您可以传递比标签值更好的东西。那可能是托管对象本身(不理想),对象是托管对象(更好),或者是不同的类,如视图模型,它知道按下按钮时要做什么(并且可以为单元格也显示)(最好)。

【讨论】:

以上是关于如何为 CoreData 中的特定索引设置值。 iOS 斯威夫特的主要内容,如果未能解决你的问题,请参考以下文章

更新CoreData模型版本时如何为实体的新属性设置默认值

如何为使用 python 保存的 tiff 图像设置像素大小,以便将像素高度和宽度设置为 ImageJ 中的特定值?

Core Data 如何为关系设置值?

如何为 CoreData 多对多关系编写 NSPredicate

在FastReport中如何为特定的数据行设置显示格式?

如何为通过 SwiftUI 中的自定义结构传递的 @State 值设置动画