4

好的,所以从全新(以前未在 iPhone 模拟器上安装的应用程序)开始,该应用程序可以正常启动。然后我按下主页按钮并单击图标,它也很好。然后,如果我按主页按钮,然后从多任务栏关闭应用程序,然后按图标,我会收到 SIGKILL 错误。

但是,当我在 Xcode 中按下运行时,它总是完美无缺地工作(即使在我从多任务栏关闭它之后,按下图标失败)。这只是模拟器的一个怪癖吗?这种行为只有在我实现了一些 NSUserDefault 的东西之后才开始,以记住它的状态等。它确实记住了所有的默认值,但当它工作时。

任何帮助表示赞赏。

编辑:

- (void)viewDidLoad
{

NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
NSDictionary *appDefaults = [NSDictionary dictionaryWithObjectsAndKeys:
                                 [NSNumber numberWithInt:1], @"firstRun",
                        nil];
[defaults registerDefaults:appDefaults];
if ([[defaults objectForKey:@"firstRun"] intValue] == 1) {
//do the stuff required at first launch
table = [NSMutableArray array];
Stocks =[NSMutableArray array];
Money =1234.56;
mem=@"GOOG";
[defaults setDouble:Money forKey:@"money"];
[defaults setObject:mem forKey:@"ticker"];
[defaults synchronize];
self.Input.text=mem;


- (void)viewWillAppear:(BOOL)animated
{

NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
if ([[defaults objectForKey:@"firstRun"] intValue] == 0) {
    [self entered:nil];

} else if ([[defaults objectForKey:@"firstRun"] intValue]== 1){
    [defaults setObject:[NSNumber numberWithInt:0] forKey:@"firstRun"];
    [defaults synchronize];
}
[super viewWillAppear:animated];
}

这是我认为可能与我的 MainViewController 中的 NSUserDefaults 相关的内容(我不在任何其他 viewController 中使用 UserDefaults)。

我还在其他一些方法中执行了一些 setObjects/同步,但它们仅在单击按钮时执行(当它崩溃时不会发生)。

4

1 回答 1

3

当您从多任务栏中删除应用程序时,您实际上是在永久关闭它。因此,您销毁与您的应用程序关联的 XCode 实例(所有进程都被杀死)。这就是您收到 SIGKILL 错误的原因。

有关 iPhone 模拟器的更多信息:http: //developer.apple.com/library/ios/#DOCUMENTATION/Xcode/Conceptual/ios_development_workflow/25-Using_iOS_Simulator/ios_simulator_application.html

事实上,如果您在实际设备上运行应用程序并在应用程序连接到 XCode 时将其从多任务栏中删除,甚至会发生这种情况。但是,如果您的应用程序安装在设备上并且未连接到 Xcode 以进行运行/测试/分析,则不会发生此问题。

于 2012-08-31T21:05:43.597 回答