Spróbuj:
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;
}
może się okazać, że zwolnienie z basenu uniemożliwia dalsze rejestrowanie w takim przypadku można dostać krok 2, ale nie Etap 3.
Jeśli krok 2 ISN” t jest drukowany, to prawie na pewno jest coś nie tak z UIApplicationMain - jest szansa, że nie powróci, więc umieść instrukcje NSLog (krok 1.1, Krok 1.2, ...) w różnych punktach w nim i uruchom, aby znaleźć ostatnią zarejestrowaną wiadomość .
Kontynuuj wiercenia w dół (krok 1.7.1, 1.7.2, .... 1.7.6.3.2, ...) - w końcu wyśledzisz dokładną linię (jakkolwiek głęboko w hierarchii połączeń) kiedy logi przestaną być rejestrowane, a ta linia będzie Twoim winowajcą ("wyłączenie" logowania lub wyjście bez powrotu).
Jedno dodatkowe fragment znalazłem w internecie:
=====
Podczas korzystania z tej linii:
int retVal = UIApplicationMain(argc, argv, @"MyApp", @"MyApp");
Pierwszy MojaApl jest głównym klasa app delegata. Druga to klasa, do której SpringBoard wysyła powiadomienia dotykowe.
Ponadto, jeśli używasz zestawu SDK i masz główną końcówkę zdefiniowaną w Info.plist, wtedy możesz zostawić połączenie jako:
jako wszystko, co będzie objęte przy tworzeniu twoich Psów.
=====
Teraz nie wiem wystarczająco dużo o rozwoju iPhone (konkretnie xibs), aby wiedzieć, co to ostatni bit nawet środki (lub jeśli już ustawić go poprawnie), ale to brzmi jak kolejna faza kompilacji.
Jednak moja pierwsza myśl z czytania polega na tym, że Springboard wywoła twoją klasę delegatów, gdy przyciski będą przyciśnięte, aby poprosić cię o zrobienie czegoś (np. Zamknięcie z wdziękiem). Jeśli nie może Cię zapytać (tj. Nie ma delegata), prawdopodobnie w ramach przysługujących Ci uprawnień może zamknąć Cię według własnego uznania, na przykład za pomocą [UIApplication _terminateWithStatus:]
.
W świecie Windows prawdopodobnie wyślesz wiadomość do głównego okna, ale, jak mówię, rozwój iPhone'a może być inny.
Mimo to jest to sposób na zbadanie sprawy. Chciałbym zobaczyć, jakie połączenia zostały wykonane z delegatem, jeśli je dostarczyłeś. Kod dołączony do fragmentu powyżej miał to:
@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 ];
}
Więc może delegat z dealloc()
jest kluczem do coraz to aby wyjść z powrotem do main()
. Dlaczego nie oddasz tego strzału? Może zbliżyć Cię do celu, nawet jeśli nie rozwiąże podstawowego problemu.
Aktualizacja: Z przyjemnością informuję, że Apple zmodyfikował oficjalną dokumentację dla UIApplicationMain() i zamknął mój błąd. Dokumentacja zawiera teraz następujące elementy: Mimo że podano typ liczby całkowitej, ta funkcja nigdy nie jest zwracana. Kiedy użytkownicy kończą aplikację na iPhone'a naciskając przycisk Home, aplikacja natychmiast wychodzi, wywołując funkcję systemu wyjścia z argumentem zero. " –