“[quelque chose copyWithZone:]: unrecognized sélecteur envoyé à l'instance” lors de l'utilisation de Liaisons / Base de Données
(auto-questionnement et l'auto-répondre parce que j'ai passé des heures sur le web à la recherche de ce, et la plupart des ressources sont autant de dire "je l'ai résolu en fin de compte", sans donner d'explications)
J'ai eu un très simple de Base de Données + Fixations application:
- Un NSArrayController tirant d'objets de Base de Données
- Un NSTableView rendant
- Un autre NSTableView que lorsque vous cliquez sur une ligne dans le premier tableau affiche les détails de l'élément
Point 3 ci-dessus était la cause de plantage de l'application, avec l'erreur:
[(my NSManagedObject) copyWithZone:]: unrecognized selector sent to instance
La mise en œuvre de cette méthode (!) et en mettant un point d'arrêt, j'ai trouvé qu'il était invoqué par Apple NSCell classe - cela n'a pas beaucoup d'aide :(.
Vous devez vous connecter pour publier un commentaire.
S'avère que TOUS les ci-dessus sont nécessaires pour déclencher ce, et XCode est vous permettant de faire quelque chose qui ne va pas dans 99,9% des cas, si ce n'est à 100%.
Base de Données des objets ne peut pas mettre en œuvre copyWithZone: - est ce qui cause le crash
Lorsqu'un tableview est renseignée à l'aide de Fixations, il essaie de copier les valeurs des objets dans la NSArrayController pour le rendu de chaque Colonne
...mais si vous ne spécifiez la Colonne de liaison entièrement (Xcode permet de moitié le préciser), puis tableview essaie de le "copier" sur le objets au lieu de leur valeurs
Le bug dans mon liaisons: j'avais précisé qu'une Colonne de Table avait une "valeur" avec:
(c'est un bug dans XCode4 de saisie semi-automatique - il supprimer le ModelKeyPath champ parfois lors de l'onglet loin trop vite)
Fini de taper dans la liaison, par exemple:
...et tout fonctionne à nouveau.
Je tiens également à poster ici parce que j'ai eu un problème similaire avec le même type de chose
vide de l'objet défini par:
Mauvais code:
cela devrait trow une erreur de compilation car avec le comptage de référence Xcode n'a aucune idée de comment copier mon objet. Au lieu de cela, il échoue au moment de l'exécution...
Écrire du code:
Espère que cela aide quelqu'un.
Merci pour cette solution, il m'a orienté dans la bonne direction. Pour ceux d'entre vous à l'apprentissage InterfaceBuilder j'espère que cette information supplémentaire permet.
Il s'avère alors que la construction d'un tutoriel que j'avais par inadvertance Lié à une
Text field Cell - Text Cell
à monArrayController.ObjectValue
.La véritable liaison était censé arriver à
Table Column > Table Cell View > Static Text - Table View Cell
Que l'on a été correct, mais visuellement dans l'arborescence en dessous (pour des raisons que je ne comprends pas encore l'IB a besoin d'un
Text Field Cell
.) J'ai eu aussi lié:Table Column > Text Field Cell - Text Cell
C'était que la deuxième liaison qui tentent de copier l'ensemble de l'objet parce que le chemin était
objectValue
avec pas de clé, il a été le déclenchement de cette erreur.Probablement une erreur de débutant, mais il fallait marcher à travers CHAQUE objet et de vérification pour les liaisons et je suis tombé sur ce un.
Comme un soupçon d'éviter toute sorte de problèmes avec la liaison, on peut convertir le
NSManagedObject
enNSDictionary
pendant le remplissage des contrôleurs avec:[object dictionaryWithValuesForKeys:[[object entity] attributeKeys]]
, il est beaucoup plus facile de se connecter et de débogage 🙂Merci pour le pointeur par la manière dont!
J'ai rencontré cette erreur quand j'ai essayé de mettre en œuvre un maître-détail de la liaison. Quelque chose d'analogue du Ministère ou de l'Employé. J'ai essayé de lier un arrayController à "la sélection.employés" du Département et a obtenu:
Fait, les employés relation n'a pas été réglé à tous, comme prévu, mais pour un. Une fois que j'ai corrigé cela, tout allait bien.
J'ai également eu un problème similaire et il est venu de l'appel d'une ProxyObject plutôt que de l'objet réel à partir d'un contrôleur de groupe.
Par exemple:
mais
Accidentellement confronté à ce problème.
Après une petite enquête, j'ai découvert que la raison a eu tort de cacao liaison option est définie sur
NSTextField
-objet de cellule.Le problème a été résolu par l'interrupteur de la liaison off.
J'ai eu ce lorsque je suis retourné une vue de la
NSTableViewDataSource
fonction-tableView:objectValueForTableColumn:row:
. Au lieu de cela, il est censé retourner une valeur (par exempleNSString*
). (Pas surprenant, compte tenu de son nom, mais l'erreur n'est pas utile dans la découverte de cette. La fonction que j'étais en train de penser est-tableView:viewForTableColumn:row:
dansNSTableViewDelegate
.)