2 Stimmen

Intermittierendes Einfrieren auf dem iPad

Ich habe eine iPad-Anwendung, die sich beim ersten Mal problemlos erstellen und ausführen lässt. Aber wenn ich die Anwendung beende und sie erneut öffne, reagiert die Schnittstelle überhaupt nicht. Wenn ich die Anwendung beende und ein weiteres Mal öffne, kommt sie nie über den Startbildschirm hinaus.

Seltsam ist nur, dass es immer funktioniert, wenn ich ein oder zwei Minuten warte, bevor ich es wieder öffne.

Irgendwelche Ideen, was los sein könnte oder wo ich mit der Fehlersuche beginnen sollte? Ich würde Haltepunkte einfügen und sehen, was los ist, aber wenn ich die Anwendung ein zweites Mal starte, hat sich der Debugger bereits beendet. Gibt es eine Möglichkeit, den Debugger und die Konsole über mehrere Ausführungsvorgänge einer Anwendung hinweg laufen zu lassen?

Danke,

Lukas

Bearbeiten: Hier ist einige Code, den ich für NSUserDefaults verwenden - könnte dies das Problem sein?

En viewDidLoad in meinem Haupt-View-Controller:

bgnum = [prefs integerForKey:@"bgnum"];
menuVisible = [prefs boolForKey:@"menuVisible"];
songTitles = [[NSMutableArray alloc] initWithArray:[prefs arrayForKey:@"songTitles"]];
numberOfSongs = [prefs integerForKey:@"numberOfSongs"];

En viewWillDisappear :

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

[prefs setBool:menuVisible forKey:@"menuVisible"];
[prefs setInteger:bgnum forKey:@"bgnum"];
[prefs setObject:songTitles forKey:@"songTitles"];
[prefs setInteger:numberOfSongs forKey:@"numberOfSongs"];

[prefs synchronize];

1voto

badweasel Punkte 2299

Ich würde mir ansehen, was in Ihrem Initialisierungscode, loadView, didFinishLaunching, etc. passiert, und verfolgen Sie es heraus. Es ist einfach, 3 oder 4 Methoden tief in diesem Zeug zu bekommen und zu viel dort tun, wenn einige davon faul sein sollte. Ohne weitere Informationen oder Beispielcode sind das alles wilde Vermutungen. Eine solche Vermutung ist Benutzer-Standards oder alles, was Sie laden aus einer Datei oder ein Wörterbuch im Voraus? Ich könnte sehen, wie etwas dort könnte Zyklus durch mehrere Staaten.

0voto

davbryn Punkte 7130

Führen Sie die Anwendung bei angeschlossenem Gerät in xCode im Debug-Modus aus und beenden Sie die Anwendung dann. Ziehen Sie nun das USB-Kabel ab und starten Sie Ihre App erneut - ist sie komplett eingefroren? Wenn Sie das Gerät drehen, ändert sich die Ausrichtung der Ansicht? Sobald die App beendet ist, schließen Sie das USB-Kabel wieder an und gehen Sie zu xCode->Window->Organizer.

Sie sollten Ihr iPad-Gerät auf der linken Seite des Bildschirms sehen. Wählen Sie es aus und Sie sollten rechts einige Registerkarten für Konsole und Absturzbericht sehen. Wählen Sie Ihre App aus dem Dropdown-Menü aus und sehen Sie nach, ob Konsolenmeldungen protokolliert wurden oder ob ein Absturz aufgetreten ist - in diesem Fall sollten Sie einen Stack-Trace erhalten, der Ihnen helfen sollte.

Ich hatte einmal ein ähnliches Problem, als ich NSZombieEnabled als aktives Argument in meiner ausführbaren Datei hatte, also könnte auch das eine Untersuchung wert sein.

0voto

M. Ryan Punkte 6824

Es besteht ein großer Unterschied zwischen "die Anwendung beenden und wieder öffnen", was in diesem Zusammenhang bedeutet, dass Sie dies recht schnell tun, und "ein oder zwei Minuten warten".

Ich habe eine ziemlich große Anwendung, an der ich entwickle und die routinemäßig mehrere Sekunden benötigt, um auf dem iPad zu "entladen", was dazu führt, dass ich die Anwendung schnell verlasse und wieder betrete, wodurch die Anwendung in einem teilweise konfigurierten Zustand erscheint und ein ungewöhnliches Verhalten verursacht.

Dies könnte darauf zurückzuführen sein, dass Ihre Anwendung nicht vollständig deallociert und ihre Threads geschlossen hat. Wenn Sie sie also schnell wieder starten, wird der Thread wieder aufgenommen (und bei 3.2 oder früheren Versionen instabil, da er bereits begonnen hat, sich selbst zu beenden).

Führen Sie einige Zeitmessungen durch... sehen Sie, was der Schwellenwert für "es stürzt ab" und "es funktioniert" ist. Wenn es mehr als 10 Sekunden sind, dann würde ich sagen, dass etwas nicht stimmt. Weniger als das, und Sie könnten sehen, was ich gerade beschrieben habe,

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X