我有一个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我相信这是无序的所以每次都可能不同,我该如何排序这个集合呢?
您可以使用allObjects
从集合中获得一个数组,然后对对象进行排序。
let orderedPlayers = (game.players!.allObjects as! [Player]).sort { $0.name < $1.name }
如果你声明为本地Swift类型Set<Player>
- CoreData也支持Swift类型-你甚至可以省略类型转换和allObjects
:
let orderedPlayers = game.players!.sort { $0.name < $1.name }
我是这样做的:
for player in game.players! {
orderedPlayers.append(player as! Player)
}
orderedPlayers.sortInPlace({ $0.name < $1.name })
您可以像这样为game
core data类添加下标:
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
}