2012-03-27 4 views
2

更新:プレーヤーを実装していないプレイヤーのないゲームのデータベースにゴーストエントリがありました。更新されたモデルの最新のエントリではなく、それらのエントリを返送していましたオブジェクトの空の配列を返すコアデータNSSet

私は、コアデータデータベースを稼働させ、関係性に問題があるように取り組んでいます。私はすべてのことにとても新しいので、私を過ぎて何も置かないでください。私は基本を理解することさえできません。しかし、ここで我々はとにかく行く。

ここで私は新しいゲームエンティティを作成します。 Playersは、配列内で選択され格納された複数のPlayerエンティティとの関係です。

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:@ "ゲーム"]; [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: () 

私は

...それはに行くが、それは[セットallobjects]を出てきたときに、空の配列を返すときプレイヤーは、その後、完全な配列、フルセットである理由を理解しています

答えて

4

どのようなキーでもvalueForKeyを使用することをお勧めします。

コアデータフォルトではエラーではないため、存在しないコアデータからアクセスしようとしています。私はsetPropertiesToFetchを使用して、フェッチによって返されるプロパティを指定すると言うでしょう。

+0

あなたは正確に話していますか? [game.players valueForKey:@ "name"]のように?それとも何か? –

+1

私は話している、あなたのゲームに選手がいるかどうかは疑いがあります:P –

+0

あなたは正しいと思います。だから、私はsetPlayersのときに私の格納ステートメントで何が間違って...私が設定NSSetは空ではありません。コアデータがそれを保存しているか、エラーを投げていないのはなぜですか? –

2

ではなく、というメッセージは、それが空であることを意味します。単にデータがデータベースからロードされていないことを意味します。あなたが通常のようにそれにアクセスすると、そこにあなたのデータが見えるはずです。これを試してみて、それが言うことを参照してください。

NSLog(@"Players count: %i", [game.players count]); 

読むここでは障害について:Core Data Programming Guide - Faulting and Uniquing

+0

nullを返しました。だから、私は選手を持っていないと思う...だから、選手が保管されている私の保管陳述は間違っていますか?私はsetPlayersを呼び出し、ArrayからNSSetを渡します。 –

+0

@lnafzigerこれは私が言っていることですが、それはエラーではありません。それはただのゲームはプレーヤーを持っておらず、存在しないものをフェッチしようとしています。 –

+0

プレイヤーを設定した後、コンテキストを保存しますか? – lnafziger