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"]);
}
}
Questo è un codice da un gioco per iPad che sto creando e sto utilizzando Core Data per l'archiviazione dei livelli. Quando un livello è completato e vinto, voglio impostare il miglior tempo per quel livello. Il tempo impiegato viene calcolato e, se è migliore del tempo migliore precedente, voglio impostarlo come il momento migliore per il livello.L'entità non è la chiave di codifica del codice compatibile
Questo codice non riesce sulla riga 'int bestTime' quando tenta di recuperare il tempo migliore da self.puzzle che è un NSManagedObject di Core Data. Il tempo migliore viene memorizzato come numero intero 32 nel modello Core Data. Non riesce con un errore SIGABRT.
'[<NSManagedObject 0x95334d0> valueForUndefinedKey:]: the entity Puzzle is not key value coding-compliant for the key "bestTime".'
Ho cercato on-line per i motivi per cui questo sta accadendo e come risolvere il problema, ma nulla sembra essere aiutato. Ci sono altri posti in cui accedo ai valori Integer dal modello Core Data e funzionano perfettamente, sebbene siano usati per filtrare e ordinare le query.
Inoltre non so se la linea in cui imposto il valore funzionerà.
Qualsiasi aiuto su questo sarebbe molto apprezzato.
MODIFICA: questo è il codice che recupera una serie di puzzle di cui uno è considerato il puzzle precedente.
// 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" una proprietà aggiunta al modello in un momento successivo? Cioè questo potrebbe essere un problema di migrazione? –
L'ho aggiunto in seguito, ma ho rimosso l'app dal simulatore e l'ho reinstallata. – danpalmer
Ho anche resettato il contenuto e le impostazioni del simulatore e ancora non funziona. Lo stesso errore di prima. – danpalmer