Базовые данные NSSet возвращают пустой массив объектов - PullRequest
2 голосов
/ 27 марта 2012

ОБНОВЛЕНИЕ: у меня были записи-призраки в моей базе данных игр без игроков до того, как я вообще реализовал игроков. Он возвращал эти записи, а не последние записи с обновленной моделью

Я работаю над тем, чтобы база данных 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] возвращает пустой массив ...

Ответы [ 2 ]

4 голосов
/ 27 марта 2012

Я бы предложил вам использовать valueForKey для любого ключа.

Ошибка в данных ядра не является ошибкой, это означает, что вы пытаетесь получить доступ из данных ядра, которых не существует. и я бы сказал, что вы должны использовать setPropertiesToFetch , который указывает, какие свойства должны быть возвращены при извлечении.

2 голосов
/ 27 марта 2012

Сообщение о том, что это ошибка, не означает, что оно пустое. Это просто означает, что данные не были загружены из базы данных. Если вы обращаетесь к нему, как обычно, вы должны увидеть свои данные там. Попробуйте и посмотрите, что там написано:

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

Прочтите о неисправностях здесь: Руководство по программированию основных данных - Неисправности и уникальность

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...