8
votes

L'entité n'est pas conforme à la clé de la valeur clé pour la clé

// 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];

3 commentaires

Est-ce que "Besttime" est une propriété que vous avez ajoutée à votre modèle plus tard? C'est à dire. pourrait-il être une question de migration?


J'ai ajouté plus tard, mais j'ai supprimé l'application du simulateur et je l'ai réinstallé.


J'ai également réinitialisé le contenu et les paramètres du simulateur et cela ne fonctionne toujours pas. Même erreur qu'avant.


6 Réponses :


12
votes

Cet objet géré n'a pas d'attribut nommé " BestTime ". Selon le message d'exception, il est définitivement un casse-tête, vous n'avez donc pas déclaré un attribut nommé BestTime dans votre modèle (ou vous l'avez mal élevé ou le capitalisé différemment).


3 commentaires

J'ai défini le "meilleur temps" dans le fichier de modèle de données de mon projet, comme toutes les autres choses que j'accède. J'ai essayé de copier et coller le nom directement à partir de ce fichier.


Est-ce définitivement dans la même entité que vous essayez d'accéder?


Oui. J'ai mis dans quelques journaux avant la ligne qui ne parvient pas à imprimer d'autres attributs que je connais. J'ai comparé la sortie à ce que cela devrait être et c'est le même modèle.




1
votes

Si vous avez ajouté Attribut BestTime au modèle à la fois, vous avez peut-être oublié de mettre la déclaration et la mise en œuvre pour eux dans la classe d'objet gérée connectée.

Essayez des actions de commodité fournies dans la conception -> Modèle de données -> Copier les déclarations / implémentations au presse-papiers (lors de la modification de votre fichier de modèle).


1 commentaires

Puzzle n'est pas une classe que j'ai écrite héritante de NsmanageDObject, c'est juste un nsmanagedObject. D'après ce que j'ai lu sur les données de base, il s'agit d'une bonne façon de le faire si vous n'avez pas de code qui doit fonctionner sur l'objet. Pour moi, c'est simplement une collection de propriétés. C'est tout.



14
votes

OK, premièrement, je voudrais remercier tous ceux qui ont suggéré des idées. Ils n'ont peut-être pas aidé à résoudre le problème, mais j'ai appris davantage sur les données de base et il est toujours bon de savoir ce que je devrais vérifier quand les choses ne fonctionnent pas.

Je ne sais pas vraiment quel était le problème. Jusqu'au matin, j'avais Xcode ouvert pendant environ 5 jours, je pense et j'ai ajouté hier l'attribut 'BestTime' au modèle de données. Je ne peux que supposer que sur les 5 jours, Xcode était devenu un peu instable et pensait qu'il a été sauvé quand ce n'était pas. J'avais vérifié que j'avais enregistré les attributs de modèle, je dois en fait avoir vérifié 3 ou 4 fois, ainsi que mon habitude de frapper la commande + s après tout changement que je fais.

Quoi qu'il en soit, j'ai redémarré ma machine plus tôt aujourd'hui et quand j'ai commencé xcode il y a quelques minutes, j'ai réalisé que "BestTime" n'était pas dans le fichier de modèle. Je l'ai ajouté, réinitialisez les paramètres sur le simulateur iPad et cela a fonctionné.

Merci à nouveau pour l'aide, désolé, la solution n'était pas plus intéressante et basée sur le code. Bien que cela me fait sentir mieux que mon code n'était pas la cause.


6 commentaires

Je vois beaucoup ce problème récemment et la plupart du temps, cela semble être causé par le paquet d'applications dans le simulateur retenant un ancien fichier .MOM d'une version précédente du modèle de données. Pour une raison quelconque, il n'est pas toujours purgé lorsque le modèle change. Le redémarrage de la machine a provoqué le simulateur de construire un répertoire d'applications entièrement nouveau résolvant le problème. La suppression de l'application du simulateur le réparera également.


J'avais essayé de supprimer l'application dans le simulateur. La question était en fait avec Xcode pensant qu'il avait mis l'attribut «BestTime» dans, mais ne l'a pas fait.


Redémarrer OS X aidé. Merci. Redémarrer Xcode, code de nettoyage ou suppression de l'application du périphérique n'a pas aidé. Sur la relance Xcode après le redémarrage du système d'exploitation X, la différence du modèle était apparente et cette fois elle se comportait. Merci pour le conseil!


Très utile, j'ai eu le même problème pendant des jours. Maintenant, j'ai redémarré l'appareil, nettoyé Xcode, redémarré mon Mac et supprimé l'application et elle fonctionne comme par magie ..


C'est fou! J'ai eu la Coredata mise à jour dans un ordinateur différent, poussé à un référentiel git et tiré dans mon ordinateur. Je devais le sauver à nouveau sans rien changer! Doit être un virus Xcode en effet. J'utilise Snow Leopard, Xcode 4.2. Votre réponse m'a sauvé beaucoup de temps! Merci beaucoup!


Je viens de supprimer l'attribut et l'a ajouté en arrière, supprimé l'application du simulateur et fonctionnait sans heurts. Merci pour l'indice cependant.



2
votes

J'ai résolu le même problème en supprimant et créez le modèle de données à nouveau et nettoyez-le puis reconstruisez à nouveau. Je pense que le bogue est causé par les données de base ne mettant pas à jour certaines données à l'intérieur parfois.


0 commentaires

0
votes

Si l'analyse JSON dans un objet géré, assurez-vous que vous utilisez le COREDATAPROPERTYName propriété plutôt que le nom JSON-Key-Name de JSON. Facile à mélanger quand ils sont nommés si de manière similaire.

Cette erreur me conduisait à Noix, et tout parce que j'utilisais image-URL plutôt que imageURL .


0 commentaires