cette classe n'est pas la valeur de la clé de codage conforme à la clé managedObjectContext
Mise à jour! J'ai créé une membrane programme de test qui illustre le problème.
Ici vous pouvez voir un fichier PDF exactement ce que j'ai fait, et de télécharger une .zip du projetUpdate2! Voir le fil de commentaires de Prétentieux Code ci-dessous pour comprendre plus au sujet de ce problème.
Mise à jour: Ajout de la bounty, je suis à la recherche d'une explication de ce qui est fait mal avec mon exemple, ce qui le corrige, et ce que le design s'adapte mieux à mon but, que le LoadNib_Controller" (voir Prétentieux Code commentaire la discussion)
Je reçois un message d'erreur d'exécution
"[<
My_WindowLoader 0x100228ba0>
valueForUndefinedKey:]: cette classe n'est pas la valeur de la clé de codage conforme à la clé managedObjectContext. "
My_WindowLoader a une référence à My_AppDelegate (que j'ai débogué et est certainement mis en place correctement). Il a aussi quelques My_WindowController *'s.. qui sont My_WindowController : NSWindowController. Ils sont utilisés afin que je puisse donner une propriété (managedObjectContext) pour Windows de charger jusqu'à que je me charge de pointe, de sorte que je peux configurer mon coeur de liaisons de Données. Ils ressemblent..
.h:
@interface My_WindowController : NSWindowController {
NSManagedObjectContext *managedObjectContext;
}
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;
.m
@synthesize managedObjectContext;
My_WindowLoader des charges d'une plume de la manière suivante:
Window1_WindowController = [[My_ WindowController alloc] initWithWindowNibName:@"Window1" owner:self];
//The following line I have debugged and it does in fact go to my app delegate, wherein it instantiates a MOC (since this is the first place in the code that it's used..), and returns it, and it appears to also be setting it via the property in My_WindowController
[Window1_WindowController setManagedObjectContext:[AppDelegate managedObjectContext]];
//The following is where I get my problem, this does load my window but in my gdb window I see the runtime error message that I list at the top of this post
NSWindow *window1Pointer = [Window1_WindowController window];
Pour obtenir le au-dessus d'erreur à l'exécution, au sein de mon Window1.plume j'ai contrôleurs de tableau qui se lient leur Objet Géré Contexte pour "Propriétaire du Fichier" avec le modèle de chemin de clé "managedObjectContext". Propriétaire du fichier est de type My_WindowController
Évidemment quelque chose de mal, mais j'ai intervenu à travers elle avec un débogueur ainsi que l'utilisation de bon sens, et il semble que tout comme il devrait fonctionner. Je vois la plupart "cette classe n'est pas kvc.." erreurs de la tige de misnaming trucs dans IBOutlet/IB, etc, mais j'ai triple vérifié tous qu'ici, et j'ai veillé à ce que j'ai complètement arrêté, puis redémarré Xcode/IB et de disposer de la dernière chargé.
OriginalL'auteur Nektarios | 2010-07-19
Vous devez vous connecter pour publier un commentaire.
Grâce à #cacao sur freenode, mon problème est que je suis en train de faire:
Je devrais faire
Noter la différence avec initWithWindowNibName: vs initWithWindowNibName:propriétaire:
En outre, le droit de placer ce code est dans AppDelegate, c'est le contrôleur App et ce type de logique est à la maison.
OriginalL'auteur Nektarios
Le problème est causé par le NSArrayController dans la nouvelle fenêtre que vous avez lié à votre managedObjectContext. Si vous décochez la case "soulève pour inapplicables les touches" l'erreur devient "Impossible d'effectuer l'opération sans objet géré contexte". Je crois qu'il ya quelque chose de mal avec la gestion du contexte de l'objet de votre classe.
EDIT:
voir les commentaires
Mise à jour de ma réponse. Pas tout à fait sûr de ce que le problème est encore. managedObjectContext n'est probablement pas valable pour une raison quelconque.
Sonne comme vous peut-être quelque chose d'intéressant que la variation de l'erreur dans ce cas
La prochaine fois que vous faites cela, gardez à l'esprit qu'il est BEAUCOUP plus facile à déboguer les problèmes de ce genre si vous utilisez plus de code au lieu d'interface builder et de séparer autant de fenêtres que vous pouvez en plus de la coque. J'aurais créé la première fenêtre dans sa propre PLUME et ont le délégué de l'ouvrir et de définir un managedObjectContext. De cette façon, lors de la prochaine fenêtre est ouverte, vous pouvez simplement transmettre le managedObjectContext sur la place de la référence à la déléguer.
Enfin réussi à le faire fonctionner! Il y a un problème avec la façon dont vous vous connectez le délégué à la LoadNib_Controller. Si je prends exactement le même code et l'ajouter à la délégué et de connecter le bouton de la méthode par le délégué et le supprimer complètement LoadNib_Controller puis, il fonctionne parfaitement. La façon dont vous l'aviez mis en place est vraiment déroutant et je ne suis pas sûr de savoir exactement où est le problème, mais si vous suivez le commentaire que j'ai mis ci-dessus puis on pourrait sans doute trouver le problème (séparée de la fenêtre à partir du menu et de ne pas accéder à l'application de déléguer directement).
OriginalL'auteur Conceited Code
Votre PLUME ont un NSWindow correctement connecté à
File's Owner (Window1_WindowController)
?OriginalL'auteur jrtc27
Votre propriétaire du fichier est le mauvais objet. C'est censé être la fenêtre contrôleur, l'un avec le managedObjectContext de la propriété. Pourquoi avez-vous fait un contrôleur séparé pour charger la plume? Ce n'est pas pratique standard. NSWindowController est conçu pour charger sa propre plume. Il doit être le propriétaire du fichier. Il doit être instancié avec [[MyWindowController alloc] initWithNibName:@"MyWindow"].
OriginalL'auteur Bored Astronaut