'NSInvalidArgumentException', reason: '-[__NSCFString _isDecompressing]: unrecognized selector
Habe ich diesen Fehler Los in Xcode:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString _isDecompressing]: unrecognized selector sent to instance 0x71863b0'
Habe ich einiges an code und Klassen an, so dass ich don T wissen, was Sie brauchen würde, um gebucht werden zu Beginn der Suche auf dieses Thema. Wenn jemand könnte mir einige Richtung, wie um zu beginnen, dies zu beheben, wäre es sehr geschätzt. p.s. wenn es irgend etwas anderes gibt, das muss gepostet werden, Sag es mir und ich werde es Bearbeiten.
Finden Sie die Zeile, wo die exception geworfen wird? Versuchen Sie, eine Ausnahme Haltepunkt - gehen Sie auf die Haltepunkte Liste und drücken Sie auf das + am unteren Rand.
First off, Scannen Sie Ihre app für "Dekomprimieren" in einem Selektor oder eine Eigenschaft name -- irgendwo ein string übergeben wird, anstatt das entsprechende Objekt. Dann legen Sie den exception-breakpoint, wie oben beschrieben, und/oder fügen Sie eine Ausnahme traceback zu Ihrem
mit den Ausnahmen Haltepunkt mir erlaubt, um die Suche einzuschränken und zu finden, wo das problem war. Dies führte mich zu einer Lösung. Mein problem war, dass ich speichern NSString (einen Dateinamen) als UIImage. Ich hatte vergessen, den Teil der Zeile "[UIImage imageWithContentsOfFile:NSString]" laden Sie das Bild aus der Datei.
First off, Scannen Sie Ihre app für "Dekomprimieren" in einem Selektor oder eine Eigenschaft name -- irgendwo ein string übergeben wird, anstatt das entsprechende Objekt. Dann legen Sie den exception-breakpoint, wie oben beschrieben, und/oder fügen Sie eine Ausnahme traceback zu Ihrem
main
.mit den Ausnahmen Haltepunkt mir erlaubt, um die Suche einzuschränken und zu finden, wo das problem war. Dies führte mich zu einer Lösung. Mein problem war, dass ich speichern NSString (einen Dateinamen) als UIImage. Ich hatte vergessen, den Teil der Zeile "[UIImage imageWithContentsOfFile:NSString]" laden Sie das Bild aus der Datei.
InformationsquelleAutor Hoodai | 2013-06-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie
unrecognized selector send to instance
Fehler, den Sie haben zu prüfen, ob Sie deklariert und implementiert die Methode hingewiesen, durch den Fehler, in Ihrem Fall_isDecompressing
. Wenn alles ok ist in Ihrer Klasse (die Methode deklariert und implementiert), dann haben Sie einen Blick auf die Klasse geben, die aufrufen der Methode, in deinem FallNSString
die meisten der Zeit, die Klasse ist falsch.Also um Ihr problem, Sie versucht, eine Methode aufzurufen
_isDecompressing
aufNSString
die nicht vorhanden ist. So stellen Sie sicher, dass jedes Objekt, das diese Methode aufruft, ist der von Ihnen gewünschten Art und nichtNSString
Einen guten Weg zu finden, die Linie, die den Absturz verursacht ist-Ausnahmen aktivieren breackpoints.
InformationsquelleAutor danypata
Die wahrscheinlichste Ursache für diesen Absturz ist, dass Sie senden eine Nachricht an einen freigegeben Instanz eines Objekts - führen Sie Ihre app mit NSZomie aktiviert ist - siehe z.B. Wie richte ich NSZombieEnabled in Xcode 4?
Was passiert ist, dass der verwendete Speicher von Ihrem Objekt wird markiert als nicht verwendet, wenn freigegeben, und ein anderes Objekt zugewiesen bekommt. Dieses Objekt ist jedoch eine andere Klasse, daher auch der nicht erkennt selector Nachricht.
Wie bereits angemerkt in den Kommentaren, die Art, wie das senden von Nachrichten an Instanzen aufgehoben manifestiert sich unterschiedlich:
Dem Objekt zugeordnet ist, irgendwo im Speicher - auf einer Seite, die aufgeteilt ist in teilen durch eine Zuweisung, z.B. malloc. Wenn die zugrunde liegende Zuweisung bereits wieder die Seite, wo der Gegenstand war, den kernel, dann die app Abstürzen, ohne log (EXC_BAD_ACCESS).
Wenn das Objekt freigegeben wurde und der retain-count erreicht 0 es wurde aufgehoben, das heißt, die Kennzeichnung der Speicher auf der Seite als frei für die zukünftige Verwendung. Wenn Sie daher versuchen, Sie zu senden Sie eine weitere Nachricht an das Objekt, der Laufzeit feststellen, dass das Objekt keine retain-count, daher wurde aufgehoben und der Fall der
message sent to deallocated instance
Ausnahme.Wenn jedoch die Erinnerung, dass Ihre erste Objekt besetzt wurde bereits von einem anderen Objekt in zwischen, es gibt keine Möglichkeit, die Laufzeit zu wissen, dass es war einmal ein Objekt, das Sie beabsichtigen, rufen Sie eine Methode auf, damit der
unrecognized selector
Ausnahme, da die Klasse zu der das Objekt gehört, ist Teil des Objekts, Struktur derisa
Zeiger. Nichts anderes ist (oder sein kann) überprüft, indem die run-time. Für die Laufzeit, es ist eine gültige Anforderung zum senden einer Nachricht an ein Objekt, aber es gibt keine solche Methode auf dem neuen Objekt.Dies kann potenziell gefährlich sein, wenn das neue Objekt reagiert auf die gleiche Botschaft, die etwas tut, tödlich in einer Klasse, da die Methode die tatsächlich für das Objekt aufgerufen, wenn es eine gültige Methode name!
Natürlich, es gibt andere Szenarien, z.B. wird das Objekt durch andere Daten überschrieben, daher der isa-Zeiger verweist auf eine nicht-existente Klasse und wird ein Absturz auftreten, genauso wie in den ersten Platz, da wird das OS versuchen zu dereferenzieren eine Adresse, die nicht gültig in Zusammenhang mit Ihrem Prozess.
message sent to deallocated instance
nichtunrecognized selector
. Und wussten Sie von einem NSString mehtod genannt_isDecompressing
? :))Das ist nicht ganz richtig. Dies hängt von verschiedenen Dingen ab, sofern der zugrunde liegende Zuweisung (in der Regel malloc) gibt bereits die Seite, wo der Gegenstand war, den kernel, dann die app Abstürzen, ohne log (EXC_BAD_ACCESS). Wenn dann lösen Sie einfach das Objekt und es aufgehoben wird, wird eine weitere Nachricht gesendet, um die Objekt-Ursache des
message sent to deallocated instance
. Jedoch, wenn der Speicher, Ihre erste Objekt besetzt wurde bereits von einem anderen Objekt, es gibt keine Möglichkeit, zur Laufzeit, zu wissen, dass es war einmal ein Objekt, das Sie beabsichtigen, rufen Sie eine Methode auf, damit derunrecognized selector
Ausnahme.InformationsquelleAutor Charlie Monroe
In der debugger-Konsole verwenden 'bt' to get a backtrace, dann zerlegen die erste Adresse in der Ablaufverfolgung, die deutlich kleiner als die anderen Werte... die kleine geschätzt-Adressen sind in Ihren code ein.
InformationsquelleAutor Brad