Frage

Nun, ich hatte eine App, die ich in iPhone SDK 2.2 entwickelt habe und kürzlich im 3.0 -Simulator gebaut und gestartet habe. Die Basis -SDK ist immer noch auf 2,2 eingestellt. Ich dachte, das würde Probleme vermeiden. Stattdessen bekomme ich

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000000a1b1c1f3
Crashed Thread:  0

Thread 0 Crashed:
0   libobjc.A.dylib                 0x92f4b688 objc_msgSend + 24
1   Foundation                      0x305085bd -[NSCFString isEqualToString:] + 61
2   HappyApp                        0x00002c27 -[CombinationsTableViewController loadData] + 220 (CombinationsTableViewController.m:64)

Der Absturz erfolgt in einer sehr einfachen Linie, wo total ist ein UITextField

if (![total.text isEqualToString:@""] ) {

Hat jemand das begegnet? Ich habe das Gefühl, dass es sich um ein Problem mit Thread -Konkurrenz handelt, oder meine ganze App kompiliert nicht richtig. Es funktioniert im 2.2.1 -Simulator. Wenn sich herausstellt, dass dies nicht der Weg ist, um eine 2.2 -App in OS 3.0 zu testen, was sollte ich dann tun, als das Dropdown -Box zu wechseln?

Aktualisieren: Andrew Pouliot hatte Recht, als dies ein veröffentlichtes Referenzproblem war. Der Debugger zeigte eine Zeile aus, damit ich die falschen Hinweise bekam. Der Täter war eigentlich diese erste Zeile:

if(!([total.text isEqual:totalTextCache]
  && [divisions.text isEqual:divisionsTextCache])) {
  //Loads the data for the table only if the values were actually changed
  totalTextCache = total.text; //ditto for divisions
}

Diese Zeilen sind die einzigen Verwendungen von totalTextCache, und es wurde ungültig, wenn total.text wurde verändert. Dies verursachte nie ein Problem in der 2.2.1 Sim wahrscheinlich, weil das alte total.text wurde nie von der Laufzeit veröffentlicht, als es den Wert änderte. Aber dieser Code war falsch. Ich habe es behoben, indem ich es geändert habe, um genau das zu tun, was ich für ein Gleichgewicht hielt:

if(!(total.text==totalTextCache && divisions.text==divisionsTextCache))

Weil ich das eigentlich nicht kopieren wollte NSStrings, aber prüfen Sie einfach, ob sie sich geändert haben (und daher hätte sich die Referenz geändert, dies funktioniert. Der schlechte Code lief in der Laufzeit 2.2.1 gut, da die alte Referenz noch über die Hash -Eigenschaft überprüft und verglichen werden könnte isEqual.

War es hilfreich?

Lösung

Als ich meine 3.0 SDK installierte, sind meine 2.0 -Tools verschwunden. Ich bin mir also nicht sicher, ob dies anwendbar ist, aber ich glaube nicht, dass Simulator -Builds als binär kompatibel für zukünftige Laufzeiten ausgelegt sind.

Es ist jedoch wahrscheinlich, dass das Problem in Ihrem Code liegt. Wenn ja, kann ich sagen, dass Sie ein Problem mit der Speicherverwaltung haben und nicht "Thread -Konkurrenz". Alles passiert am Hauptfaden in UIKIT (nicht fadensicher).

Überprüfen Sie, wo Sie Ihre Gesamtvariable einrichten. Es wurde wahrscheinlich bereits veröffentlicht, als Sie diese Methode treffen. Stellen Sie sicher, dass Ihre Rückhaltung sinnvoll ist.

Haben Sie den gleichen Fehler, wenn Sie für 3.0 erstellen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top