2009-08-13 5 views
1

Ich habe eine App, die bei normalem Gebrauch ohne Probleme zu laufen scheint. Der Clang Static Analyzer meldet ebenfalls keine Probleme. Wenn ich versuche, es in Instruments auszuführen, schlägt es mit einer nicht erkannten Selektorausnahme fehl.Die iPhone App, die in Geräten läuft, schlägt mit nicht erkanntem Selektor fehl.

Die Codezeile eine einfache Eigenschaft Setter von der Form ist:

self.bar = baz; 

Um herauszufinden, was los ist, habe ich ein NSLog() sofort oben rufen:

NSLog(@"class = %@ responds = %d", [self class], [self respondsToSelector:@selector(setBar:)]); 
self.bar = baz; 

Auf der Emulator (ohne Instrumente) und auf einem Gerät zeigt dies genau das, was ich erwarten würde:

Klasse = Foo reagiert = 1

Wenn unter Instruments ausgeführt wird, erhalte ich:

class = Foo antwortet = 0

Ich bin ratlos, was dies verursachen könnte. Vielleicht wird ein anderer Speicherort in der Umgebung von Instrumenten trommelt? Kann jemand vorschlagen, wie ich das debuggen könnte?

Antwort

0

Wenn bar gehört zu sich selbst, können Sie nicht tun bar=baz;?

+0

Das wird keine Beobachter der Eigenschaft benachrichtigen, und es ist möglich, dass bar nicht direkt als Instanzvariable implementiert ist. Es kann aus anderen Werten synthetisiert werden. Zum Beispiel könnte eine "fullname" -Eigenschaft in den "firstname" - und "lastname" -Ivar gespeichert werden, und kein ivar würde direkt darauf sichern. –

0

Überprüfen Sie Ihre Eigenschaften. Vielleicht brauchen Sie einen Cast auf Baz?

0

Es gibt nicht genug Informationen hier, um zu wissen, was vor sich geht, aber dann, wenn Sie wüssten, welche Informationen Sie zur Verfügung stellen würden, hätten Sie es wahrscheinlich schon repariert. Damit. Ein paar Dinge zu überprüfen:

  • Ist der "Selbst" -Zeiger in irgendeiner Weise swizzled? Versuchen Sie, den Wert von self an verschiedenen Punkten nur aus Gründen der Gesundheit auszudrucken
  • Wenn Ihr Code in Instruments läuft, läuft es in einem anderen Modus? (32-bit vs. 64-bit, Garbage gesammelt vs. retain-release, etc.) Ich bin nicht sicher, warum einige von denen einen Effekt haben würden, aber wenn es in einem anderen Modus läuft, ist das etwas, in das man schauen muss.
  • Synthetisieren Sie den Setter korrekt? Oder wird es dynamisch bereitgestellt (über Core Data usw.)? Wenn Sie eine setBar: Methode manuell angeben, erhalten Sie immer noch den Fehler?
Verwandte Themen