Try:
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;
}
Это может быть, что освобождение бассейна предотвращения дальнейшего протоколирования и в этом случае вы получите шаг 2, но не шаг 3.
Если шаг 2 ISN» t, то это почти что-то не так с UIApplicationMain - есть вероятность, что он не вернет так, что он поставит NSLog-инструкции (шаг 1.1, шаг 1.2, ...) в разных точках внутри него и запустится, чтобы найти последнее сообщение в журнале ,
Продолжайте сверление (шаг 1.7.1, 1.7.2, .... 1.7.6.3.2, ...) - в конечном итоге вы будете отслеживать точную линию (хотя бы глубину иерархии вызовов) когда сообщения журнала перестают регистрироваться, и эта строка будет вашей виновницей (либо «выключение» протоколирования, либо выход, не возвращаясь нормально). далее
Один фрагмента я нашел в Интернете:
=====
При использовании этой линии:
int retVal = UIApplicationMain(argc, argv, @"MyApp", @"MyApp");
Первый MyApp Ваш главный класс приложение делегат. Второй - это класс, в котором SpringBoard отправляет уведомления о касании.
Также, если вы используете SDK и имеете главный наконечник, определенный в Info.PLIST, то вы можете оставить вызов как:
int retVal = UIApplicationMain(argc, argv, nil, nil);
как все это будет покрыта, когда вы создаете свои xibs.
=====
Теперь я не знаю достаточно о развитии iPhone (специально xibs), чтобы знать, что это последний бит даже средства (или, если вы установите его правильно), но это звучит как другой этап компиляции.
Однако, моя первая мысль от чтения заключается в том, что Springboard вызовет ваш класс делегата, когда кнопки будут нажаты, чтобы попросить вас что-то сделать (например, закрыть изящно). Если он не может спросить вас (т. Е. Ни один делегат), вероятно, это право на то, чтобы закрыть вас, как он считает нужным, например, с [UIApplication _terminateWithStatus:]
.
В мире Windows вы, вероятно, отправите сообщение о выходе в главное окно, но, как я уже сказал, разработка iPhone может быть разной.
Тем не менее, это авеню для расследования. Мне было бы интересно узнать, какие призывы были сделаны делегату, если вы предоставили его. Код, включенный с сниппета выше было это:
@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 ];
}
Так может быть, делегат с dealloc()
секрет заставить его выйти обратно main()
. Почему бы тебе не сделать это? Это может приблизиться к вашей цели, даже если это не решит основную проблему.
Обновление: я рад сообщить, что Apple изменила официальную документацию для UIApplicationMain() и закрыла мою ошибку. Документация теперь включает следующее: Несмотря на то, что задан тип возвращаемого целого числа, эта функция никогда не возвращается. Когда пользователи завершают приложение iPhone, нажав кнопку «Домой», приложение сразу же выйдет, вызвав системную функцию выхода с аргументом нуля ». –