Ich hatte beim Testen auf iOS 6 mit meiner aktuellen iOS 5 App einen kleinen Fehler.
Wir haben festgestellt, dass eine Methodenrückgabe für eine unschädliche Methode gesperrt ist, die intern verwendete Blöcke verwendet, aber nicht als Eigenschaften. Das Problem besteht darin, dass der Aufruf der Methode funktioniert, ebenso wie jede Codezeile innerhalb der Methode (einschließlich des Blocks, der Code verwendet)
Ich habe versucht, [block copy] vor dem Aufruf des Blocks, aber es gab absolut keine Änderung.
stellt fest, dass die Funktionsdefinition meines Codes in einer internen Schnittstelle deklariert wurde und keinen Rückgabetyp hatte.
Hier finden Sie einige Grafiken zur Veranschaulichung dieses Problems.
Der anfängliche Fehler
Die Stapelspur
Die fragliche Methode (isoliert von sich selbst, um den genauen Ort des Problems zu bestimmen)
Die Funktionsimplementierung (dies wird aufgerufen und zurückgegeben)
Die Definition in der privaten Schnittstelle
Ich entschied mich, den Funktionsaufruf zu betrachten, und bemerkte, dass er zurückkehrte (id) anstatt void
Und schließlich die einzige Codeänderung, die diesen Fehler behoben hat.
Erläuterung
Dieser Fehler hat seinen hässlichen Kopf bekommen, als mein Klient mich angerufen hat, dass unsere App nicht auf ios 6 läuft
Ich wurde gezwungen, iOS 6 und Xcode 4.5 herunterzuladen, um das auszuprobieren.
Ich stürzte tatsächlich jedes Mal ab, wenn die App ausgeführt wurde.
Nachdem ich diesen Fehler beim Stack-Überlauf zwischen anderen mit Google verknüpften Websites gejagt habe, habe ich das Block-Problem versucht, das bei einigen anderen auftritt. Und habe eine Kopie gemacht, wo immer ich konnte, um zu versuchen, das Problem des zurückgehaltenen Objekts, das vom Stapel fällt, zu lindern.
Ich habe Blockeigenschaften nicht verwendet, also habe ich einfach die Blöcke selbst aufgerufen.
Das hat nicht geholfen.
Endlich mit einem anderen Entwickler, der es mit mir durchgeht. Ich trat zurück und schaute es aus einem anderen Blickwinkel an und beschloss zu versuchen, zu bestimmen, was zum Teufel zurückgehalten wurde.
Es stellte sich heraus, dass das Ergebnis der Funktion beibehalten wurde. Und die einzige Möglichkeit, das herauszufinden, war, den Wert zu betrachten, den die automatische Vervollständigung als Rückgabetyp zeigte.
Ich wusste, dass der Rückgabetyp ungültig ist, aber mir wurde gesagt, dass der Rückgabetyp id ist und das hat die Untersuchung der Methodendefinition ausgelöst.
Ich hoffe, dass dies anderen hilft, die dieses Problem haben, da ich ungefähr zwei Stunden damit verbracht habe, es zu finden, und es stellte sich heraus, dass es ein semantisches Problem zwischen einem Ergebnistyp war, der niemals existiert haben sollte.
Tags und Links ios exc-bad-access