【发布时间】:2017-04-20 06:39:23
【问题描述】:
我正在使用核心数据将 chessGames 和 chessPlayers 保存到数据库中。 - 每个 chessGame 与一个白人玩家和一个黑人玩家都有一对一的关系(删除规则设置为无效)。 - 每个玩家都与 gamesAsWhite 和 gamesAsBlack 有一对多关系(删除规则设置为拒绝)。
每当我删除一个 chessGame 时,我也会尝试删除参与该游戏的玩家,如果玩家没有参与任何其他游戏的话。如下代码所示。
用于删除国际象棋游戏和潜在玩家的代码:
context.perform {
//deletes associated chessgameSnapShot
context.delete(chessGameMO)
CoreDataUtilities.save(context: context)
//delete rule set to deny
//player only deleted if it is not involved in any games
whitePlayer.deleteIfNotInvolvedInAnyGames(inManagedObjectContext: context)
blackPlayer.deleteIfNotInvolvedInAnyGames(inManagedObjectContext: context)
CoreDataUtilities.save(context: context)
}
deleteIfNotInvolvedInAnyGames 的实现:
func deleteIfNotInvolvedInAnyGames(inManagedObjectContext context:NSManagedObjectContext){
guard let gamesAsBlack = self.gamesAsBlack as? Set<ChessGameMO>,
let gamesAsWhite = self.gamesAsWhite as? Set<ChessGameMO> else {return}
let gamesInvolvedIn = gamesAsWhite.union(gamesAsBlack)
if gamesInvolvedIn.isEmpty {
context.delete(self)
}
}
只有在删除 chessGame 后保存上下文时,该代码才有效。如果我删除第一个CoreDataUtilities.save(context: context),那么whitePlayer(和blackPlayer)永远不会在deleteIfNotInvolvedInAnyGames 中被删除,因为与chessGameMO 的关系似乎还没有失效。
这是正常行为吗? NSManagedObjects(在内存中)之间的关系不应该在我保存上下文之前更新吗?
【问题讨论】:
标签: swift core-data nsmanagedobject