我在Realm中执行写操作时遇到问题。除了这个之外,所有其他读/写操作都完美无缺,我对可能导致此问题的原因感到困惑。
我在领域有一个游戏对象,它有一个数组,可以保存对象的得分类型。当用户加入游戏时,API会使用一组占位符得分对象进行响应。我试图将这些分数添加到游戏对象中。基于不同的流程,游戏对象可能已经或可能尚未写入Realm
。我使用以下代码为游戏对象添加分数。 Game
和Scores
这里是RLMObject
[[RLMRealm defaultRealm] transactionWithBlock:^{
RLMRealm *realm = [RLMRealm defaultRealm];
//NSArray *scores contains all score objects to be added
Game game = [Game createOrUpdateInRealm:realm withValue:aGame];
for (Score *aScore in scores) {
Score *rlmScore = [Score createOrUpdateInRealm:realm withValue:aScore];
[game.scores addObject:rlmScore];
}
//Pass game to next ViewController for display
}];
问题是,在此事务块结束时,game.scores数组有1个分数对象,即使循环已运行多次,因为分数数组有多个对象。即便是,这个问题并不总是会发生。在另一个线程中没有其他操作。此时UI被阻止并等待API响应,并且仅在此写入事务之后继续。
任何帮助将不胜感激
答案 0 :(得分:0)
[[RLMRealm defaultRealm] transactionWithBlock:^{
RLMRealm *realm = [RLMRealm defaultRealm];
//NSArray *scores contains all score objects to be added
Game game = [Game createOrUpdateInRealm:realm withValue:aGame];
NSMutableArray *rlmScores = [NSMutableArray array];
for (Score *aScore in scores) {
Score *rlmScore = [Score createOrUpdateInRealm:realm withValue:aScore];
[rlmScores addObject:rlmScore];
}
[game.scores addObjects:rlmScores];
//Pass game to next ViewController for display
}];
将Realm得分对象添加到数组,然后将该数组添加到game.scores RLMArray工作。我不知道为什么这个工作,并在循环中逐个添加对象将无法正常工作。如果其他人遇到类似的问题,我发布的解决方案对我有用。
请随时为此问题提供更好的解决方案或解释。