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"]);
}
}
Este es un código de un juego de iPad que estoy creando y estoy utilizando Core Data para almacenar los niveles. Cuando se completa y gana un nivel, quiero establecer el mejor tiempo para ese nivel. Se calcula el tiempo necesario y, si es mejor que el mejor tiempo anterior, quiero establecerlo como el mejor momento para el nivel.Entidad no es un valor clave que cumple con la codificación de la clave
Este código falla en la línea 'int bestTime' cuando intenta recuperar el mejor tiempo de self.puzzle que es un NSManagedObject de Core Data. El mejor momento se almacena como un Entero 32 en el modelo de Datos básicos. Falla con un error SIGABRT.
'[<NSManagedObject 0x95334d0> valueForUndefinedKey:]: the entity Puzzle is not key value coding-compliant for the key "bestTime".'
He buscado en línea por razones de por qué esto está sucediendo y cómo solucionarlo, pero nada parece haber ayudado. Hay otros lugares en los que accedo a valores enteros desde el modelo Core Data y funcionan perfectamente, aunque se usan para filtrar y ordenar consultas.
Tampoco sé si funcionará la línea donde establecí el valor.
Cualquier ayuda sobre esto sería muy apreciada.
EDITAR: Este es el código que obtiene una serie de acertijos de los cuales uno se toma como el acertijo anterior.
// 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];
¿Es 'bestTime' una propiedad que agregó a su modelo más tarde? Es decir. ¿Podría ser esto un problema de migración? –
Lo agregué más tarde, pero eliminé la aplicación del simulador y la reinstalé. – danpalmer
También reinicié el contenido y la configuración del simulador y todavía no funciona. Mismo error que antes. – danpalmer