1

我正在设置一个 UILocalNotification 来通知用户一个事件。

我的问题是模拟器在设置通知并关闭应用程序后崩溃并显示消息“ Thread 1:signal SIGKILL ”。

我知道这个答案,但我没有在 userinfo 字典中存储任何内容。

这是代码:

NSDate *alertTime = [[NSDate date]
                     dateByAddingTimeInterval:10];
UIApplication* app = [UIApplication sharedApplication];
UILocalNotification* notifyAlarm = [[UILocalNotification alloc] init];

if (notifyAlarm)
{
    notifyAlarm.fireDate = alertTime;
    notifyAlarm.timeZone = [NSTimeZone defaultTimeZone];
    notifyAlarm.repeatInterval = 0;
    notifyAlarm.alertBody = @"Testing notification.";
    [app scheduleLocalNotification:notifyAlarm];
    NSLog(@"Notification set");
}

你知道为什么会发生这种情况吗?

谢谢

4

1 回答 1

1

我遇到了同样的问题,经过一些实验后,我学到了足够的知识来解决它。

首先,请注意,您只需按照以下步骤即可随意触发此崩溃/挂起:

  1. 从 Xcode启动您的应用程序(在设备或模拟器上)。
  2. (可选)触发通知,然后按主页按钮以最小化您的应用程序,然后双击主页按钮并从出现的 Dock 中完全关闭您的应用程序。
  3. 无需拔下设备、关闭模拟器或关闭 Xcode,直接从设备或模拟器重新启动您的应用程序,方法是点击调用应用程序的通知或简单地点击主屏幕上的应用程序图标。

现在,如果您在模拟器上,应用程序将立即崩溃,如果您在真实设备上,整个设备将挂起并且即使按下 Home 按钮也没有响应,直到您拔下它或再次按下 Run 按钮在 Xcode 中。

这个问题似乎在 Xcode 4.6.3 和 Xcode 5.0 中都表现出来了;其他版本我没试过。

不用说,如果您尝试测试涉及从通知完全重新启动应用程序的用户交互路径,就像这里的问题提问者一样(而不是简单地测试通知将您的应用程序从的背景)。幸运的是,这个错误很容易解决。

如果您在设备上,解决方法很简单:从 Mac 上拔下设备。仅当您尝试启动应用程序时将设备插入 Xcode 时,上述错误才会显现出来。

如果您只能访问模拟器,那就有点棘手了,但也只是一点点。首先,使用此处的说明使您能够从 Xcode 外部启动模拟器:

  1. 在 Finder 中,浏览至/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/
  2. iOS Simulator应用程序从该文件夹拖到您的 Dock 中。
  3. 现在,您可以随时将模拟器作为独立应用程序从您的扩展坞启动。

现在来测试使用本地通知来完全重新启动应用程序的应用程序:

  1. 从 Xcode 在模拟器上启动您的应用程序。
  2. 触发您的本地通知。
  3. 使用主页按钮退出您的应用程序。
  4. 双击主页按钮并从模拟器底座关闭您的应用程序。
  5. command用+关闭模拟器q
  6. 从 Mac 的扩展坞重新启动模拟器。
  7. 等待您的通知。
  8. 点击通知以重新启动应用程序。
  9. 请注意,它不会立即崩溃!耶!

这是必要的,这很愚蠢,但至少应用此解决方法不会花费很长时间。

于 2013-10-29T15:26:41.430 回答