更新:在我实施玩家之前,我的游戏数据库中没有玩家。它使用更新的模型
返回这些条目而不是最新条目我正在努力让Core Data数据库正常工作,并且在关系方面遇到一些麻烦。我对整件事情都很陌生,所以不要把任何东西放在我身边,我甚至可能都不了解基本知识。但无论如何我们都去了。
这是我创建新游戏实体的地方。玩家与选择并存储在阵列中的几个玩家实体之间存在可能的关系。
Game *newGame = [NSEntityDescription insertNewObjectForEntityForName:@"Game" inManagedObjectContext:[SDDataManager dataManager].managedObjectContext];
[newGame setGameType:@"multipleChoice"];
[newGame setDate:[NSDate date]];
NSSet *playersSet = [NSSet setWithArray:players];
[newGame setPlayers:playersSet];
[newGame setCards:[NSKeyedArchiver archivedDataWithRootObject:selectedCards]];
NSError *error;
[[SDDataManager dataManager].managedObjectContext save:&error];
NSLog(@"New Game Error: %@",[error localizedDescription]);
问题在于,当我从数据库中调用它时:
NSFetchRequest * requestSavedGame = [NSFetchRequest fetchRequestWithEntityName:@“Game”]; [requestSavedGame setFetchLimit:1];
NSError *error;
NSArray *loadedGame = [[SDDataManager dataManager].managedObjectContext executeFetchRequest:requestSavedGame error:&error];
NSLog(@"Load Game Error: %@",[error localizedDescription]);
Game *game = [loadedGame objectAtIndex:0];
NSLog(@"Players Set: %@",game.players);
NSLog(@"Players: %@",[game.players allObjects]);
球员:是空的?它准确地返回:
Players Set: Relationship 'players' fault on managed object (0xd023b70) <Game: 0xd023b70> (entity: Game; id: 0xd023180 <x-coredata://E6A82377-31D2-4D11-B890-B3FDC5A03E0E/Game/p1> ; data: {
cards = <62706c69 73743030 d4010203 0405086e 6f542474 6f705824 6f626a65 63747358 24766572 73696f6e 59246172 63686976 6572>;
currentPlayer = 0;
date = "2012-03-27 18:20:07 +0000";
gameType = multipleChoice;
players = "<relationship fault: 0xd01fd60 'players'>";
})
Players: ( )
我不明白为什么玩家是一个完整的数组,然后是一个完整的数组,当它出现时,[set allobjects]返回一个空数组...
答案 0 :(得分:4)
我建议您使用 valueForKey 来获取任何密钥。
在核心数据中,故障不是错误,这意味着您正在尝试从不存在的核心数据进行访问。我会说你应该使用 setPropertiesToFetch 来指定fetch应该返回哪些属性。
答案 1 :(得分:2)
表示它是错误的消息表示它是空的。它只是意味着数据尚未从数据库加载。如果您像平常一样访问它,您应该在那里看到您的数据。试试这个,看看它说的是什么:
NSLog(@"Players count: %i", [game.players count]);
在此处阅读有关错误的信息:Core Data Programming Guide - Faulting and Uniquing