Проблема с приложением ShieldTerminate на iPhone - PullRequest
1 голос
/ 09 марта 2009

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

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

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

Он существует, но я хотел бы добавить сюда окно предупреждения с возможностью не бросить курить.

(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 как допустимый ввод.

Любой пример кода будет принята с благодарностью.

Ответы [ 4 ]

3 голосов
/ 09 марта 2009

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

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

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

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

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

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

0 голосов
/ 01 мая 2010

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

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

-(BOOL)applicationShouldTerminate :(UIApplication *)application
0 голосов
/ 09 марта 2009

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

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

Недавно было выпущено программное обеспечение iPhone 2.0, и вместе с ним возможность для пользователей загружать собственные приложения (т.е. не веб-сайты) непосредственно на их телефоны из пользовательского интерфейса iPhone или через iTunes. Разработчики (любой, кто платит Apple 59GBP за привилегию) могут затем написать свои собственные приложения и иметь их для покупки в приложении Магазин.

Одним из ограничений санкционированного Apple SDK является то, что только один Приложение может быть запущено одновременно. Это представляет проблема для приложений, таких как IM-клиенты, музыкальные проигрыватели и другие программы чья функциональность зависит от возможности работать в фоновом режиме. Другой пример (любезно предоставленный Джеймсом) - это приложение, которое принимает Преимущество GPS-чипа iPhone 3G для создания журнала всех места, которые вы посещаете.

Однако, я обнаружил один хитрый трюк: ваше приложение будет только прекратить, если вы отключитесь от него, и ударить iPhone кнопка включения, когда ваше приложение находится на переднем плане, не считается переключение В результате вы можете создавать приложения, которые продолжайте работать, пока iPhone в вашем кармане - идеально подходит для Пример GPS.

Достичь этого так же просто, как реализовать два метода в вашем UIApplication делегат - applicationWillResignActive: и applicationDidBecomeActive:. Вот простой пример для демонстрации эффект.

В файл заголовка делегата UIApplication добавьте новый ivar: BOOL activeApp. Затем в вашей реализации добавьте следующие три методы:

- (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];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...