if (win) {
// Game was won, set completed in puzzle and time
// Calculate seconds taken
int timeTaken = (int)([NSDate timeIntervalSinceReferenceDate] - self.gameStartTime);
int bestTime = [[self.puzzle valueForKey:@"bestTime"] intValue];
if (timeTaken < bestTime && bestTime != 0) {
[self.puzzle setValue:[NSNumber numberWithInt:timeTaken] forKey:@"bestTime"];
NSLog(@"Best time for %@ is %@", [self.puzzle valueForKey:@"name"], [self.puzzle valueForKey:@"bestTime"]);
}
}
Это код из игры iPad, которую я делаю, и я использую основные данные для хранения уровней. Когда уровень завершен и выигран, я хочу установить лучшее время для этого уровня. Выбранное время рассчитывается, и если оно лучше предыдущего наилучшего времени, я хочу установить его как лучшее время для уровня.Объект не соответствует ключевому значению для кода
Этот код выходит из строя в строке «int bestTime», когда он пытается извлечь наилучшее время из self.puzzle, который является NSManagedObject из Core Data. Лучшее время хранится как Integer 32 в модели Core Data. Ошибка с ошибкой SIGABRT.
'[<NSManagedObject 0x95334d0> valueForUndefinedKey:]: the entity Puzzle is not key value coding-compliant for the key "bestTime".'
Я искал в Интернете по причинам, почему это происходит и как это исправить, но ничего не помогло. Существуют и другие места, где я получаю доступ к значениям Integer из модели Core Data, и они отлично работают, хотя они используются для фильтрации и сортировки запросов.
Я также не знаю, будет ли строка, в которой я устанавливаю значение, будет работать.
Любая помощь в этом была бы принята с благодарностью.
РЕДАКТИРОВАТЬ: Это код, который извлекает множество головоломок, из которых одна взята как головоломка выше.
// Define our table/entity to use
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Puzzle" inManagedObjectContext:managedObjectContext];
// Setup the fetch request
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];
// Set the filter for just the difficulty we want
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"difficulty == %d", difficulty];
[request setPredicate:predicate];
// Define how we will sort the records
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sortid" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
[request setSortDescriptors:sortDescriptors];
[sortDescriptor release];
// Fetch the records and handle an error
NSError *error;
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
Это свойство 'bestTime', которое вы добавили в свою модель позже? То есть может ли это быть проблемой миграции? –
Я добавил его позже, но я удалил приложение из симулятора и снова установил его. – danpalmer
Я также сбросил содержимое и настройки симулятора, и он все еще не работает. Такая же ошибка, как и раньше. – danpalmer