Versuchen:
int main(int argc, char *argv[])
{
NSLog(@"Step 0");
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSLog(@"Step 1");
int retVal = UIApplicationMain(argc, argv, nil, nil);
NSLog(@"Step 2");
[pool release];
NSLog(@"Step 3");
return retVal;
}
Es kann sein, dass die Freigabe des Pools weitere Protokollierung verhindert, in dem Fall, dass Sie Schritt 2 erhalten würden, aber nicht Schritt 3.
Wenn Schritt 2 isn‘ Wenn es gedruckt wird, dann ist mit UIApplicationMain mit Sicherheit etwas nicht in Ordnung - es besteht die Möglichkeit, dass es nicht zurückkehrt, daher NSLog-Anweisungen (Schritt 1.1, Schritt 1.2, ...) an verschiedenen Stellen einfügen und ausführen, um die zuletzt protokollierte Nachricht zu finden .
Nach unten bohren (Schritt 1.7.1, 1.7.2, .... 1.7.6.3.2, ...) - schließlich werden Sie die genaue Linie ausfindig machen (jedoch tief in der Aufrufhierarchie) Wenn die Protokollmeldungen nicht mehr protokolliert werden, ist diese Zeile der Täter (entweder "Protokollierung abbrechen" oder "Beenden", ohne normal zurückzukehren).
Ein weiteres Snippet ich im Web gefunden:
=====
Wenn Sie diese Zeile:
int retVal = UIApplicationMain(argc, argv, @"MyApp", @"MyApp");
Die erste MeineAnw Ihr Haupt AppDelegate Klasse. Die zweite ist die Klasse, an die SpringBoard Berührungsbenachrichtigungen sendet.
Auch, wenn Sie das SDK verwenden und eine Hauptnib in der Info definiert haben.plist, dann können Sie den Anruf wie verlassen:
int retVal = UIApplicationMain(argc, argv, nil, nil);
als alle, die abgedeckt werden, wenn Sie Ihre xibs erstellen.
=====
Jetzt genug Ich weiß nicht, über iPhone Entwicklung (insbesondere xibs) zu wissen, was das letzte Bit auch Mittel (oder, wenn Sie haben es richtig eingerichtet), aber es klingt wie eine weitere Phase der Kompilierung.
Allerdings ist mein erster Gedanke aus dem Lesen, dass Springboard Ihre Delegate-Klasse aufrufen wird, wenn die Tasten gedrückt werden, um Sie zu bitten, etwas zu tun (wie elegant herunterzufahren). Wenn es Sie nicht fragen kann (d. H. Kein Delegierter), liegt es wahrscheinlich in seinem Recht, Sie so herunterzufahren, wie es für richtig hält, wie zum Beispiel mit [UIApplication _terminateWithStatus:]
.
In der Windows-Welt würden Sie wahrscheinlich eine Quit-Nachricht an das Hauptfenster senden, aber, wie ich schon sagte, iPhone-Entwicklung kann anders sein.
Dennoch ist es eine Möglichkeit, zu untersuchen. Ich wäre daran interessiert zu sehen, welche Anrufe an einen Delegierten gerichtet wurden, wenn Sie einen zur Verfügung gestellt haben. Der Code mit dem Code-Schnipsel enthalten hatte darüber:
@implementation MyApp
- (void) applicationDidFinishLaunching:(id)unused {
rect = [ UIHardware fullScreenApplicationContentRect ];
rect.origin.x = 0.0f;
rect.origin.y = 0.0f;
window = [ [ UIWindow alloc ] initWithContentRect: rect ];
[ window makeKeyAndVisible ];
view = [ [ MyAppView alloc ] initWithFrame: rect ];
[ window setContentView: view ];
}
- (void) dealloc {
[ window release ];
[ view release ];
[ super dealloc ];
}
Also vielleicht ein Delegierter mit dealloc()
ist das Geheimnis, um es zurück zu main()
zu verlassen. Warum gibst du das nicht ab? Es bringt Sie vielleicht Ihrem Ziel näher, auch wenn es das Kernproblem nicht löst.
Update: Ich freue mich berichten zu können, dass Apple die offizielle Dokumentation für UIApplicationMain() geändert und meinen Fehler geschlossen hat. Die Dokumentation enthält jetzt Folgendes: Obwohl ein ganzzahliger Rückgabetyp angegeben ist, wird diese Funktion nie zurückgegeben. Wenn Benutzer eine iPhone-Anwendung durch Drücken der Home-Taste beenden, wird die Anwendung sofort beendet, indem die exit-Systemfunktion mit einem Argument von null aufgerufen wird. " –