尝试将异常记录到NSUserDefaults

时间:2014-03-31 00:21:16

标签: ios objective-c nsuserdefaults

我正在尝试通过捕获所有未处理的异常并将详细信息写入NSUserDefaults来记录我的iPhone应用程序中的崩溃。我通过将其添加到

进行设置
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
}

并定义了处理它的函数:

void uncaughtExceptionHandler(NSException *exception) {

NSMutableString *errorString = [NSMutableString new];
[errorString appendFormat:@"Exception Name : %@\n", exception.name];
[errorString appendFormat:@"Exception Reason : %@\n", exception.reason];
[errorString appendString:@"User Info : \n"];

for (NSString *key in [[exception userInfo] allKeys]) {
    [errorString appendFormat:@"Key : %@ Value : %@\n", key, [[exception userInfo] valueForKey: key]];
}

[errorString appendFormat:@"Call Stack : %@\n", [exception callStackSymbols]];

[[NSUserDefaults standardUserDefaults] setObject:errorString forKey:@"ErrorLog"];

NSLog(@"Exception : %@", errorString);

}

当发生崩溃时,一切正常,NSLogs打印出所有异常细节,但NSUserDefaults没有添加任何东西,我不知道为什么。

有没有人知道为什么这不会将对象设置为NSUserDefaults?

感谢您的帮助......

2 个答案:

答案 0 :(得分:1)

设置对象

后尝试添加此行
[[NSUserDefaults standardUserDefaults] setObject:errorString forKey:@"ErrorLog"];
////add this line//////
[[NSUserDefaults standardUserDefaults] synchronize];
///////////////////////

答案 1 :(得分:1)

您应致电' [[NSUserDefaults standardUserDefaults] synchronize];'

顺便问一下,你为什么要使用' NSUserDefaults'?

开发时,您可以看到登录控制台。 但是,如果您的应用程序已经发布一次,则用户设备的崩溃登录无法访问,因此无法使用。

如何使用Flurry或Google Analytics等日志记录服务?