2012-03-27 72 views
2

更新:我有我的遊戲數據庫中沒有玩家的幽靈條目,我之前實現了玩家。它正在返回這些條目不是最新的條目與更新的模型核心數據NSSet返回空對象陣列

我正在努力獲得一個核心數據數據庫的工作和一些關係的麻煩。我對整件事情都很陌生,所以不要把任何東西放在我身後,我甚至都不瞭解基本知識。但是,我們無論如何都要去。

這是我創建一個新的遊戲實體的地方。玩家與選中並存儲在數組中的多個玩家實體可能存在關係。

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它指定哪些屬性應該由fetch返回。

+0

確切位置在哪裏,你說?就像[game.players valueForKey:@「name」]?或類似的東西? – 2012-03-27 19:41:57

+1

我在說,我懷疑你的遊戲是否有玩家:P – 2012-03-27 19:44:24

+0

我認爲你是對的。所以,當我設置播放器時,我的存儲語句有什麼問題...我設置的NSSet不是空的。爲什麼核心數據沒有保存或拋出錯誤? – 2012-03-27 19:48:17

2

消息說這是故障不是表示它是空的。它只是意味着數據尚未從數據庫加載。如果你像正常訪問它,你應該在那裏看到你的數據。試試這個,看看它說:

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

閱讀關於故障的位置:Core Data Programming Guide - Faulting and Uniquing

+0

它返回null。所以我想我沒有球員......所以我的儲存聲明有什麼問題,球員們正在儲存?我打電話給setPlayers,並從Array傳入NSSet ... – 2012-03-27 19:47:41

+0

@lnafziger這就是我所說的,那不是一個錯誤。它只是遊戲沒有任何玩家,並試圖獲取哪些不存在。 – 2012-03-27 19:50:13

+0

設置玩家後,你保存上下文嗎? – lnafziger 2012-03-27 19:53:00