2015-02-28 1 views
2

Dans mon application, j'affiche une carte avec des annotations et l'utilisateur peut parcourir la liste des annotations dans une vue tabulaire (dans un contrôleur de vue modale).sélecteur non reconnu isPitched appelé

Je rencontre un bug bizarre que je peux reproduire à la fois sur l'appareil et dans le simulateur (iOS 7 & 8).

En mode aigu, si je tente de sélectionner un élément à mon avis de la table de POI, il fait un de ces:

  • change le centre de la carte à un point au hasard sur la carte, et non l'annotation sélectionnée .
  • se bloque avec le message que j'ai mis sous (NSZombies activé).

- [__ NSCFString isPitched]: sélecteur non reconnu envoyé à l'instance 0x7f24e6e0

J'ai essayé plusieurs méthodes pour résoudre ce bogue, mais sans succès. Et ce qui m'intrigue, c'est que je ne trouve aucune information sur la méthode isPitched. Ce n'est pas dans mon code, ni dans la documentation Apple.

Est-ce que quelqu'un en sait plus sur MapKit et ce genre de problème? Autrement, sauriez-vous un moyen de désactiver la tonalité lorsqu'un utilisateur sélectionne un PI dans la liste? Peut-être que cela empêcherait le bug.

screenshot

EDIT: Je viens de trouver que la méthode 'isPitched' est en fait une partie de VectorKit! Cela n'aide pas vraiment, cependant. Aucune documentation sur VectorKit ...

EDIT 2: Trace de pile ajoutée.

 
-[__NSCFString isPitched]: unrecognized selector sent to instance 0x7db84870 
2015-02-28 14:25:08.501 Cartel 2015[2481:178443] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString isPitched]: unrecognized selector sent to instance 0x7db84870' 
*** First throw call stack: 
(
    0 CoreFoundation      0x00afb946 __exceptionPreprocess + 182 
    1 libobjc.A.dylib      0x00784a97 objc_exception_throw + 44 
    2 CoreFoundation      0x00b035c5 -[NSObject(NSObject) doesNotRecognizeSelector:] + 277 
    3 CoreFoundation      0x00a4c3e7 ___forwarding___ + 1047 
    4 CoreFoundation      0x00a4bfae _CF_forwarding_prep_0 + 14 
    5 VectorKit       0x02dd09c1 __86-[VKMapCameraController _animateToPosition:pitch:yaw:duration:timingCurve:completion:]_block_invoke + 1809 
    6 VectorKit       0x02d88645 -[VKAnimation onTimerFired:] + 357 
    7 VectorKit       0x02d9895e -[VKScreenCanvas animateWithTimestamp:] + 686 
    8 VectorKit       0x02d9850e -[VKScreenCanvas updateWithTimestamp:] + 46 
    9 VectorKit       0x02d71e69 -[VKMapView onTimerFired:] + 89 
    10 libobjc.A.dylib      0x0079a771 -[NSObject performSelector:withObject:] + 70 
    11 VectorKit       0x0323463c -[GGLDisplayLink _displayLinkFired:] + 60 
    12 QuartzCore       0x041abcad _ZN2CA7Display15DisplayLinkItem8dispatchEv + 45 
    13 QuartzCore       0x041abb83 _ZN2CA7Display11DisplayLink14dispatch_itemsEyyy + 311 
    14 QuartzCore       0x041ac067 _ZN2CA7Display16TimerDisplayLink8callbackEP16__CFRunLoopTimerPv + 123 
    15 CoreFoundation      0x00a558d6 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 22 
    16 CoreFoundation      0x00a5525d __CFRunLoopDoTimer + 1309 
    17 CoreFoundation      0x00a146ba __CFRunLoopRun + 2090 
    18 CoreFoundation      0x00a13bcb CFRunLoopRunSpecific + 443 
    19 CoreFoundation      0x00a139fb CFRunLoopRunInMode + 123 
    20 GraphicsServices     0x03f4324f GSEventRunModal + 192 
    21 GraphicsServices     0x03f4308c GSEventRun + 104 
    22 UIKit        0x00f318b6 UIApplicationMain + 1526 
    23 Cartel 2015       0x0001110d main + 141 
    24 libdyld.dylib      0x046aaac9 start + 1 
    25 ???         0x00000001 0x0 + 1 
+1

Mettez à jour votre question avec les détails pertinents de la trace de la pile de l'accident. – rmaddy

+0

Terminé. Ce n'est pas vraiment bien formaté, cependant. – Pierre

+0

J'aurais dû préciser que vous devez poster une trace de pile symbolisée. Mais le problème est dans la classe 'VKMapCameraController'. – rmaddy

Répondre

2

OK, j'ai réussi à empêcher le blocage avec le correctif suivant.

Lorsqu'un POI est sélectionné dans ma liste, je déclenche une méthode déléguée du contrôleur de vues qui gère MapView à partir de la méthode didSelect du contrôleur de tableView. Si vous avez le même problème, je suppose que vous comprenez ce que je veux dire, jusqu'à présent.

Dans cette méthode, j'ai demandé à MapView de se centrer sur les coordonnées du POI.

Maintenant, pour résoudre le problème qui ne se est passé lorsque le mode de suivi des utilisateurs a été réglé sur « lancé » (suivant votre orientation), j'ai simplement ajouté une ligne pour désactiver ce mode de suivi au début de ma méthode:

[mapView setUserTrackingMode: MKUserTrackingModeNone] ; 

Cela a supprimé les plantages apparus de manière aléatoire. Notez qu'il ne résulte pas d'un comportement contre-intuitif car ce mode de suivi est automatiquement désactivé lorsque l'utilisateur déplace la carte.

Donc, le problème a été résolu pour moi, mais si vous avez des informations à propos de ce sélecteur est Pitched et ce qui a vraiment causé le problème, vous êtes les bienvenus à l'afficher ici!

+0

Merci pour la réponse, mais je suis confronté à ce problème dans mon application MAC et dans l'application os x "setUserTrackingMode" n'est pas disponible si le problème n'est pas lié à "setUserTrackingMode" dans mon cas, je suppose. –

+0

Pas de chance avec cette solution. :(... Nous obtenons un crash similaire sur iPhone avec iOS 9. Nous n'avons pas de liste contrôlant une carte, juste une carte avec des POI. –