gpt4 book ai didi

iphone - 如何在Core Data中设置一对多关系的排序?

转载 作者:行者123 更新时间:2023-12-03 21:06:29 26 4
gpt4 key购买 nike

假设我有一个包含许多 Player 对象的 Game 对象(一场棒球比赛)。每场比赛的阵容都有特定的顺序。

对于如何存储此场景的排序有什么建议吗?

如果这只是一款游戏,我可以简单地在每个 Player 对象中存储一个索引。但是,每个游戏的顺序都会发生变化。因此,如果 Player 对象被删除,我想确保 Game 对象也得到更新(保持引用完整性)。

对于我正在做的事情,我总是有 2 到 4 名玩家。

我尝试为 Game 对象中的每个玩家创建单独的关系,例如“playerOne”、“playerTwo”等。但是,当我尝试在 Player 对象中创建逆关系时,我只能设置“游戏”与其中一名玩家的关系(“playerOne”、“playerTwo”等)。

我可能尝试的下一件事是在 Player 对象中创建四个反向关系,以专门指向 Game 对象中的关系,但我认为它不正确并且会非常困惑。

另一个选择是我可以将每个玩家对象的完整 URL 作为字符串存储在 Game 对象中。但是,我随后需要管理删除等。

如有任何建议,我们将不胜感激。

最佳答案

我过去也遇到过类似的问题。我个人的做法就是对它们建立索引。添加一些属性,例如 index。然后,每当进行更改时,调用一些重新标记索引的本地方法。这是一个应该给出基本逻辑的粗略示例

- (void)retagPlayers {
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Players" inManagedObjectContext:self.managedObjectContext];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"game like %@", currentGame];
NSSortDescriptor *sorter = [NSSortDescriptor sortDescriptorWithKey:@"index" ascending:YES];
[request setEntity:entity];
[request setSortDescriptors:[NSArray arrayWithObject:sorter]];
[request setPredicate:predicate];

NSError *error = nil;
NSArray *players = [self.managedObjectContext executeFetchRequest:request error:&error];

int index = 0;
for (Player *player in players) {
player.index = index;
index++;
}
}

这假设了一些事情,所以我应该指定其中一些。其中,它假设您有一个名为“玩家”的玩家实体。每个游戏都与一个游戏有关系,在本例中是一个字符串。这些东西在您的代码中可能会有所不同,并且可以进行相应的更改。无论哪种方式,逻辑都是相同的。它基本上在上下文中搜索特定游戏的 Player 实例(使用谓词),然后按索引对它们进行排序。然后,它枚举返回的数组,并将新索引设置为更改后的值。我希望这有帮助

关于iphone - 如何在Core Data中设置一对多关系的排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6658095/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com