如何获取某个对象对应于某个 UISegmentedControl 的上下文

How to get context of what Object corresponds to a certain UISegmentedControl

您可以在下面找到我创建的 UITableViewCell 子类的图像。每个单元格对应一个在两个参赛者之间进行的游戏,并且有一个获胜者,由所选控件定义(在编辑器中显示 "first" 和 "second")。如果这个获胜者值发生变化,我想更新该游戏的信息并将其存储在核心数据中。问题是,当我创建一个 IBAction 连接到我的故事板时,它会在获胜者更改时被触发,它没有上下文或不知道它属于什么游戏,因此我无法弄清楚要更新哪个游戏

的获胜者

如何获取在此 IBAction winnerChanged() 方法中执行的游戏的上下文?我能否以某种方式使用 UISegmentedControl 的 superView 或 superClass 来获取有关整个 UITableViewCell 的更多信息?

@IBAction func winnerChanged(_ sender: UISegmentedControl) {
        os_log("Saving games because winner was changed", type: .debug)
        // need to know what game to change the winner of here
        self.allGames.forEach({ updateOrCreateGame(game: [=10=]) })
    }

这是我的 UITableViewCell 子类的代码:

class ConferenceResultsTableViewCell: UITableViewCell {

    @IBOutlet weak var gameWinnerControl: UISegmentedControl!
    @IBOutlet weak var confidenceTextField: UITextField!
    @IBOutlet weak var confidenceAverageAllUsersLabel: UILabel!

}

通常您会在单元格内创建这样的 @IBAction。根据您的问题,我假设方法 @IBAction func winnerChanged(_ sender: UISegmentedControl) 在您的控制器中某处定义。

如果您通过实施该方法为您的单元格创建一个专用的 class,将会更容易并且也可以解决您的问题。 这将允许您将单元格与具体的 CoreData 对象挂钩(通过下面示例中的标识符)。您需要做的就是从 controller/data 来源的 cellForRow 某处调用 setup 方法。

final class MatchCell: UITableViewCell {

   @IBAction func winnerChanged(_ sender: UISegmentedControl) {
      ...
   }

   func setup(with match: Match) {
      self.matchId = mathc.id
      ...
   }

}

如果您仍然需要在控制器中使用 updateOrCreateGame 方法,您可以在 setup 方法中传递回调 onUpdateRequested: (Match) -> Void 并从 winnerChanged 方法调用该回调。