【问题标题】:NSSet has no subscript membersNSSet 没有下标成员
【发布时间】:2017-02-18 02:43:56
【问题描述】:

我有一个 CoreData 对象,它的关系是 NSSet。我正在尝试将其用作我的数据源,但得到以下内容

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = playerTableView.dequeueReusableCellWithIdentifier("Cell")! as UITableViewCell
    cell.textLabel?.text = self.game.players[indexPath.row]
    return cell
}

如何在 tableView 中使用我的 NSSet,我相信这将是无序的,因此每次都可能不同,那么我该如何订购这个集合?

【问题讨论】:

  • 如果你想给一个集合带来秩序,那么你应该将元素加载到一个数组中。
  • @TimVermeulen 是的,我已经开始关注这个,它在我的列表中排名第二。我想我可以按名称将 CoreData 对象排序到一个数组中?
  • 例如,是的。

标签: swift uitableview nsset


【解决方案1】:

您可以使用allObjects 从集合中获取一个数组,然后对对象进行排序。

let orderedPlayers = (game.players!.allObjects as! [Player]).sort { $0.name < $1.name }

如果你将集合声明为原生 Swift 类型 Set&lt;Player&gt;——CoreData 也支持 Swift 类型——你甚至可以省略类型转换和 allObjects

let orderedPlayers = game.players!.sort { $0.name < $1.name }

【讨论】:

    【解决方案2】:

    我就是这样做的:

    for player in game.players! {
            orderedPlayers.append(player as! Player)
        }
        orderedPlayers.sortInPlace({ $0.name < $1.name })
    

    【讨论】:

      【解决方案3】:

      你可以像这样为game核心数据类添加下标:

      subscript(index: Int) -> Player? {
          let descriptor = NSSortDescriptor(key: "name", ascending: true)
          let orderedPlayerArray = players?.sortedArray(using: [descriptor])
          let playerWhereIndex = orderedPlayerArray?[index]
          return playerWhereIndex as? Player
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-18
        • 1970-01-01
        • 2022-12-06
        • 2021-06-05
        • 2016-07-08
        • 1970-01-01
        • 2017-06-20
        • 1970-01-01
        相关资源
        最近更新 更多