gpt4 book ai didi

ios - 核心数据无明显原因恢复到以前的状态

转载 作者:可可西里 更新时间:2023-11-01 03:56:09 26 4
gpt4 key购买 nike

基于 Core Data 的 iOS 应用程序的一些客户报告说他们偶尔会丢失数据。这些报告非常奇怪,这就是我想征求您的意见的原因。客户报告说,当他们在一段时间后(几分钟、几小时或第二天)重新打开应用程序时,他们的一些数据丢失了,就好像底层数据库恢复到以前的状态一样

我已经使用 Core Data 多年,以前从未遇到过这样的问题。该应用程序非常简单,这意味着我只使用一个托管对象上下文,并且在应用程序进入后台之前提交更改。

我意识到这是不可能的,但是这类问题的潜在原因是什么,或者我可以进行哪些检查以收集更多信息?不幸的是,我无法自己重现该问题,这会使这一切变得容易得多。

更新:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (_persistentStoreCoordinator) return _persistentStoreCoordinator;

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Prime.sqlite"];

NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];

if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:@{ NSMigratePersistentStoresAutomaticallyOption : @YES, NSInferMappingModelAutomaticallyOption : @YES } error:&error]) {
// Error Handling
}

return _persistentStoreCoordinator;
}

最佳答案

检查您是否已将保存消息放入适当的 appDelegate 方法中,以便在不保存的情况下无法退出应用程序。 applicationWillResignActive 和 applicationWillTerminate 应该可以满足您的所有需求。

除了正确的错误处理和日志记录之外,您应该会收获很多。我个人喜欢将这些类型的错误记录到一个文件中,该文件可以根据要求发送给我。但这对于您的特定应用程序来说可能有点矫枉过正。这是凭内存写的,所以请原谅任何错误。

NSError *error = nil;
if (![[self managedObjectContext] save:&error])
{
NSString *errorString = @"%@ ERROR : %@ %@", [[NSDate date] description], [error localizedDescription], [error userInfo]);

NSString *documentsDirectory = [NSHomeDirectory()
stringByAppendingPathComponent:@"Documents"];

NSString *filePath = [documentsDirectory
stringByAppendingPathComponent:@"errorLog.txt"];

// Write to the file
[errorString writeToFile:filePath atomically:YES
encoding:NSUTF8StringEncoding error:&error];
}

关于ios - 核心数据无明显原因恢复到以前的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16766900/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com