2009-03-09 3 views
1

У меня проблема с applicationShouldTerminate.Проблема с applicationShouldTerminate на iPhone

Что бы я ни делал, это швы, которые не имеют никакого эффекта. Любая помощь будет оценена.

Я хорошо разбираюсь в программировании, но это только дает мне головную боль. Im going над некоторыми базовыми учебниками для xcode, так как я новичок в mac в целом, и в настоящее время я смотрю на простое приложение для фонарика.

Существует, но я хотел бы добавить здесь окно оповещения с опцией не quit.

(void)applicationWillTerminate:(UIApplication *)application 
{ 
    [application setIdleTimerDisabled:NO]; 
} 

Это не действует, предупреждение закрыто еще до его создания.

(void)applicationWillTerminate:(UIApplication *)application 
{ 
    [application setIdleTimerDisabled:NO]; 
    UIAlertView *alertTest = [[UIAlertView alloc] 
          initWithTitle:@"This is a Test" 
          message:@"This is the message contained 
          with a UIAlertView" 
          delegate:self 
          cancelButtonTitle:@"Button #1" 
          otherButtonTitles:nil]; 

    [alertTest addButtonWithTitle:@"Button #2"]; 
    [alertTest show]; 
    [alertTest autorelease]; 

    NSLog(@"Termination"); 
} 

Я сделал некоторое чтение в Интернете и обнаружил, что это должно быть возможно сделать это с

(NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication*)sender 

Но не матер, где я ставлю эту декларацию, я получаю сообщение об ошибке: ошибка синтаксиса перед тем NSApplicationTerminateReply.

Нет синтаксической ошибки, за исключением того, что xcode, похоже, не распознает NSApplicationTerminateReply как допустимый ввод.

Любой образец кода был бы весьма полезен.

ответ

2
  1. applicationShouldTerminate и NSApplication не существуют на iPhone. Вы должны использовать UIApplication.

  2. Предупреждающее представление никогда не отображается, потому что метод 'show' не блокируется, и поэтому конец 'applicationWillTerminate' достигается сразу же после создания представления предупреждения и попытки его показать. Я считаю, что это по дизайну.Вы не можете начать асинхронные операции в 'applicationWillTerminate'.

+0

Спасибо, это объясняет много! – NccWarp9

0

Я думаю, что нашел ответ на то, что хотел, но должен будет проверить его, когда вернусь домой. Некоторые направления были найдены here

http://blog.minus-zero.org/

The iPhone 2.0 software was recently released, and with it came the ability for users to download native apps (i.e., not web sites) directly to their phones from within the iPhone UI or via iTunes. Developers (anyone who pays Apple 59GBP for the privilege) can then write their own apps and have them available for purchase in the App Store.

One limitation of the Apple-sanctioned SDK is that only one application is allowed to be running at a time. This presents a problem for apps such as IM clients, music players and other programs whose functionality relies on being able to run in the background. Another example (courtesy of James) would be an app that takes advantage of the iPhone 3G's GPS chip to create a log of all the places you visit.

However, there is a neat trick that I discovered: your app will only get terminated if you switch away from it, and hitting the iPhone's power button while your app is in the foreground doesn't count as switching away. The upshot of this is you can create apps which continue to run while the iPhone is in your pocket - perfect for the GPS example.

Achieving this is as simple as implementing two methods in your UIApplication delegate - applicationWillResignActive: and applicationDidBecomeActive: . Here's a simple example to demonstrate the effect.

In your UIApplication delegate header file, add a new ivar: BOOL activeApp . Then, in your implementation, add the following three methods:

- (void)applicationWillResignActive:(UIApplication *)application { 
    NSLog(@"resigning active status..."); 
    activeApp = NO; 
    [self performSelector:@selector(sayHello) withObject:nil afterDelay:1.0]; 
} 


- (void)applicationDidBecomeActive:(UIApplication *)application { 
    NSLog(@"becoming the active app..."); 
    activeApp = YES; 
} 

- (void)sayHello { 
    NSLog(@"Hello!"); 
    if (!activeApp) 
    [self performSelector:@selector(sayHello) withObject:nil afterDelay:1.0]; 
} 
+0

Похоже, что применяется только тогда, когда телефон переходит в режим ожидания, а не тогда, когда они на самом деле переключаться между приложениями. Мне любопытно, будет ли это работать. –

+0

Eric's right: Эти методы вызывается только тогда, когда телефон переходит в режим ожидания или когда на нем отображается диалог (например, входящее SMS-сообщение или всплывающее окно iPod-control). – Marco

+0

Я должен объяснить больше, что я пытаюсь сделать. Я нашел интересное приложение под названием «backgrounder» и задавался вопросом, что с ним можно сделать, поэтому я пробовал его, но он швы, когда мое приложение переходит на задний план, оно завершается. Я хочу проверить, действительно ли приложение завершено. – NccWarp9

3

Я знаю, что это не является ответом, но, надеюсь, я могу быть полезным:

Отображение «Действительно бросить курить?» - тип сигнала, как это , даже если вы можете технически вывести его (и я не уверен, что вы это сделаете), это плохая идея и, вероятно, приведет к отказу от App Store или, в лучшем случае, к непоследовательному опыту пользователя, поскольку никакие другие приложения не делают этого ,

Соглашение с приложениями iPhone заключается в том, чтобы сохранить состояние, если необходимо, а затем убрать управление (для завершения) как можно быстрее, когда пользователь нажимает кнопку «домой» или переключает приложения.

Для обеспечения последовательного опыта у Apple, вероятно, есть агрессивный таймер, чтобы ограничить то, что вы можете сделать в applicationWillTerminate. И даже если у них нет технической меры, у них, вероятно, есть политика утверждения App Store, чтобы гарантировать, что приложения сразу прекращают свое обращение к ним.

+0

Что делать с приложениемShouldTerminate? Im в настоящее время экспериментирует с iPhone как новичком, чтобы узнать, чего можно достичь. Кроме того, im, используя джейлбрейк iPhone, не намерен использовать appstore, пока. У меня есть truble, реализующий его в моих приложениях. – NccWarp9

0

Что касается ошибки applicationShouldTerminate, в случае, если кто-то любопытно, NSApplicationTerminateReply и NSApplication, кажется устаревшим ... хотя метод операционного является точно, как он появляется в документации!

Определение вашего метода, как ниже следует строить без ошибок:

-(BOOL)applicationShouldTerminate :(UIApplication *)application 
Смежные вопросы