iOS崩溃时调用方法

时间:2015-05-05 02:53:06

标签: ios objective-c

我有一个不断检查数据的iOS应用程序,我已经为AppWillTerminate实现了方法 当用户关闭应用程序时,它可以正常工作,数据会在关闭应用程序之前保存。

但是,有时当应用程序在后台运行并且用户切换到其他iOS应用程序时,当他们使用其他应用程序时,iOS可能会崩溃。

当我说iOS崩溃时,我的意思是它会进入黑屏并重新启动。

在这种情况下,我的应用程序"将终止"没有被调用,因此,我的应用程序的数据丢失了。

我的问题是,有没有办法在iOS崩溃之前保存我的应用程序数据?

3 个答案:

答案 0 :(得分:0)

试试这个。

application: didFinishLaunchingWithOptions:方法中,添加此内容。

NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);

并将以下内容添加到AppDelegate

void uncaughtExceptionHandler () {
    // method to save data
}

答案 1 :(得分:0)

正如评论中提到的那样(我现在无法评论,否则会在那里提到它)最好的方法是将数据保存在你的     applicationDidEnterBackground: AppDelegate中的函数。根据苹果,当你的应用程序处于后台时,它处于挂起状态,这意味着Apple可以随时终止它而不通知应用程序,如果活动应用程序(前台运行的应用程序需要更多资源)。所以你的应用程序从暂停状态(它被发送到后台时的状态)变为终止,而其他应用程序被使用,当它再次变为活动时它从头开始,所以实际上它没有崩溃(不会引发异常)但是如果它在背景中被终止则重新启动。

这是理解App Lifecycle

的一个很好的阅读

答案 2 :(得分:0)

试试这个:

在AppDelegate.m中

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSSetUncaughtExceptionHandler(&HandleException);

    struct sigaction signalAction;
    memset(&signalAction, 0, sizeof(signalAction));
    signalAction.sa_handler = &HandleSignal;

    sigaction(SIGABRT, &signalAction, NULL);
    sigaction(SIGILL, &signalAction, NULL);
    sigaction(SIGBUS, &signalAction, NULL);
}

void HandleException(NSException *exception) {
/** NSLog(@"App crashing with exception: %@", [exception callStackSymbols]); */
/* Save somewhere that your app has crashed. */
}

void HandleSignal(int signal) {
/**NSLog(@"We received a signal: %d", signal); */
/** Save somewhere that your app has crashed. */
}