applicationShouldTerminate在iPhone上的问题

时间:2009-03-09 13:14:45

标签: iphone

我遇到了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 个答案:

答案 0 :(得分:3)

我知道这不是一个答案,但希望我能提供帮助:

显示“真的退出?” - 输入这样的警报,即使你可以从技术上取下它(我不确定你能不能),这是一个坏主意,可能会导致App Store拒绝或者,至多是一种不一致的用户体验,因为没有其他应用程序这样做。

iPhone应用程序的惯例是在必要时保存状态,然后在用户点击主页按钮或切换应用程序时尽快控制(终止)。

为了确保一致的体验,Apple可能会设置一个积极的计时器来限制您在applicationWillTerminate中可以执行的操作。即使他们没有采取技术措施,他们也可能有App Store批准政策,以确保申请人在被要求时立即退出。

答案 1 :(得分:2)

  1. 在iPhone上不存在applicationShouldTerminate和NSApplication。你必须使用UIApplication。

  2. 永远不会显示警报视图,因为“show”方法不会阻止,因此,在创建警报视图并尝试显示警报视图后,会立即到达“applicationWillTerminate”的结尾。我相信这是设计的。您无法在'applicationWillTerminate'中真正开始异步操作。

答案 2 :(得分:0)

我想我找到了我想要做的答案,但是当我回到家时需要检查它。 找到了一些方向here

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

  

iPhone 2.0软件最近发布了,随之而来的是   用户下载本机应用程序(即非网站)的能力   直接通过iPhone UI或iTunes中的手机。   开发人员(任何为此特权支付Apple 59GBP的人)都可以   编写自己的应用程序,并在App中购买   存储。

     

Apple批准的SDK的一个限制是只有一个   允许应用程序一次运行。这提出了一个   IM客户端,音乐播放器和其他程序等应用程序的问题   其功能依赖于能够在后台运行。   另一个例子(由詹姆斯提供)将是一个需要的应用程序   iPhone 3G的GPS芯片的优势在于创建了所有的日志   你去过的地方。

     

然而,我发现了一个巧妙的技巧:你的应用只会   如果你离开它,然后点击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];
}

答案 3 :(得分:0)

关于applicationShouldTerminate错误,如果有人好奇,NSApplicationTerminateReply和NSApplication似乎已被弃用......即使OP的方法正是它在文档中的显示方式!

定义您的方法,如下所示应该构建没有错误:

-(BOOL)applicationShouldTerminate :(UIApplication *)application