我正在尝试通过捕获所有未处理的异常并将详细信息写入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?
感谢您的帮助......
答案 0 :(得分:1)
设置对象
后尝试添加此行[[NSUserDefaults standardUserDefaults] setObject:errorString forKey:@"ErrorLog"];
////add this line//////
[[NSUserDefaults standardUserDefaults] synchronize];
///////////////////////
答案 1 :(得分:1)
您应致电' [[NSUserDefaults standardUserDefaults] synchronize];
'
顺便问一下,你为什么要使用' NSUserDefaults'?
开发时,您可以看到登录控制台。 但是,如果您的应用程序已经发布一次,则用户设备的崩溃登录无法访问,因此无法使用。
如何使用Flurry或Google Analytics等日志记录服务?