Comment puis-je debug "méconnu sélecteur envoyé à l'instance" erreur
Je suis entrain de créer un tableau personnalisé vue sur les cellules de mon tableau. Après je connecter un affichage de l'image de cellule personnalisé (dans le scénario) de mon code swift, j'obtiens l'erreur suivante.
[UITableViewCellContentView image]: unrecognized selector sent to instance 0x7fb4fad7fd20'
*** First throw call stack:
(
0 CoreFoundation 0x000000010ccbb3f5 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x000000010e7e9bb7 objc_exception_throw + 45
2 CoreFoundation 0x000000010ccc250d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
3 CoreFoundation 0x000000010cc1a7fc ___forwarding___ + 988
4 CoreFoundation 0x000000010cc1a398 _CF_forwarding_prep_0 + 120
5 UIKit 0x000000010d7d8881 -[UITableViewCell _marginWidth] + 151
6 UIKit 0x000000010d7ca23d -[UITableViewCell _separatorFrame] + 70
7 UIKit 0x000000010d7ca6fa -[UITableViewCell _updateSeparatorContent] + 360
8 UIKit 0x000000010d7d4e85 -[UITableViewCell _setSectionLocation:animated:forceBackgroundSetup:] + 1174
9 UIKit 0x000000010d634ea8 __53-[UITableView _configureCellForDisplay:forIndexPath:]_block_invoke + 1822
10 UIKit 0x000000010d5b5eae +[UIView(Animation) performWithoutAnimation:] + 65
11 UIKit 0x000000010d63477b -[UITableView _configureCellForDisplay:forIndexPath:] + 312
12 UIKit 0x000000010d63bcec -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 533
13 UIKit 0x000000010d61b7f1 -[UITableView _updateVisibleCellsNow:isRecursive:] + 2846
14 UIKit 0x000000010d63165c -[UITableView layoutSubviews] + 213
15 UIKit 0x000000010d5be199 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 521
16 QuartzCore 0x00000001114b6f98 -[CALayer layoutSublayers] + 150
17 QuartzCore 0x00000001114abbbe _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 380
18 QuartzCore 0x00000001114aba2e _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24
19 QuartzCore 0x0000000111419ade _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 242
20 QuartzCore 0x000000011141abea _ZN2CA11Transaction6commitEv + 390
21 QuartzCore 0x000000011141b255 _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 89
22 CoreFoundation 0x000000010cbf0347 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
23 CoreFoundation 0x000000010cbf02a0 __CFRunLoopDoObservers + 368
24 CoreFoundation 0x000000010cbe60d3 __CFRunLoopRun + 1123
25 CoreFoundation 0x000000010cbe5a06 CFRunLoopRunSpecific + 470
26 GraphicsServices 0x0000000110daa9f0 GSEventRunModal + 161
27 UIKit 0x000000010d545550 UIApplicationMain + 1282
28 TestWork 0x000000010caa432e top_level_code + 78
29 TestWork 0x000000010caa436a main + 42
30 libdyld.dylib 0x000000010efc3145 start + 1
31 ??? 0x0000000000000001 0x0 + 1
)
Pouvez-vous svp me dire comment faire pour résoudre cette erreur?
Merci.
- Je ajouter une exception point d'arrêt dans mon projet.
C'est la ligne où il se casse.
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCellWithIdentifier(kCellIdentifier) as ItemTableViewCell <---------------
Mais je n'utilise pas d '"image" dans mon code.
- vous appelez
image]
quelque part.. mais sur le mauvais objet. la première ligne de l'erreur vous indique que beaucoup - Cesser de l'appeler [image] sur UITableViewCellContentView - que serait-il fixer. Nous montrer le code qui est à l'origine de ce crash.
- Je pense que vous avez utilisé une partie de l'image dans tableViewCell mais que l'image peut ne pas être dans votre bundle.
Vous devez vous connecter pour publier un commentaire.
Essayer de définir une symbolique point d'arrêt sur
-[NSObject(NSObject) doesNotRecognizeSelector:]
. Cliquez simplement sur[+]
dans le coin en bas à gauche du point d'arrêt Navigateur pour ajouter un point d'arrêt. Puis cliquez sur "Ajouter Symbolique point d'arrêt'. La reproduction de vos planter maintenant devrait vous donner une meilleure idée de l'endroit où dans votre code, le problème se produit.Vous pouvez facilement suivre de tels accidents à l'aide de
Exception Breakpoints
.Ouvrir le
Breakpoint Navigator
et ajouter leUne fois que vous ajoutez l'Exception de point d'arrêt, l'option sera ouverte à choisir le
Exception
.Sélectionnez
Objective-C
.Exécuter le code et le plantage de l'application, point d'arrêt va vous arrêter à l'endroit où le code est de s'écraser.
La première étape consiste à analyser le message d'erreur:
Cela vous indique que le "message"
image
a été "envoyé" à un objet de la classe UITableViewCellContentView. (En d'autres termes, une tentative a été faite pour appeler la méthodeimage
sur un objet de la classe UITableViewCellContentView.)La première chose à se demander est: "est-ce que cela a du sens?" Il se peut que le nom de la classe a un
Image
méthode, mais pas unimage
méthode, et donc le mauvais nom de la méthode a été utilisée lors de l'appel. Ou il se peut que le nom de la méthode estsomeMethod:someParm:
, mais la classe implémentesomeMethod:someParm:anotherParm:
, ce qui signifie qu'un paramètre a été omis lors de l'appel.Le plus souvent, cependant, le nom de la classe n'a pas de méthode, même ressemblant vaguement à la méthode nommée, ce qui signifie que d'une certaine manière un pointeur vers l'objet incorrect a été utilisé dans le défaut d'appel.
Par exemple, on pourrait faire:
Et obtenez une erreur le long des lignes de:
parce que l'objet récupéré à partir de
myDictionary
était, en fait, un NSDictionary, pas le NSArray qui était prévu.Le plus déroutant, malheureusement, c'est quand ce genre d'erreur se produit en profondeur dans l'INTERFACE utilisateur du système de code plutôt que dans votre propre code. Cela peut se produire lorsque vous en quelque sorte passé le mauvais objet à une interface de système, ou peut-être configuré la mauvaise classe dans Interface Builder ou où.
Une autre raison possible est que l'objet d'origine a été détruit, puis un autre objet a été alloué à la même adresse mémoire. Puis votre code envoie le message, en pensant qu'il a encore un pointeur vers l'objet ancien, et de l'Objective-C déclenche une exception parce que le nouvel objet ne comprend pas ce message.
Pour diagnostiquer ce problème, exécutez le générateur de profils avec des "Zombies" détection.
Dans ces scénarios que j'ai trouvé utile de regarder deux choses
Quand j'ai eu cette erreur, c'est généralement parce que j'ai envoyé un message à une instance de Type A, quand j'attendais de Type B.
Dans ce scénario, vous ne peut-être satisfaire à une exigence d'une classe parent (compte tenu de votre instance de ItemTableViewCell plus susceptibles hérite).
Vous pouvez peut-être nous montrer le code de votre ItemTableViewCell classe?
Vous pouvez utiliser le code suivant pour déclarer la variable:
Vous pouvez utiliser Introspection pour savoir si l'objet répond à un sélecteur ou pas..
Seulement si il est vrai que le code du travail.. sinon il va se planter pour assurer
J'ai eu le même problème, et cela a fonctionné pour moi:
Remplacer la isEqual dans votre SKScene:
Vous devez passer
indexPath
de déclarer un objet de la tableview cellule.