gpt4 book ai didi

ios - 核心数据迁移崩溃

转载 作者:行者123 更新时间:2023-11-29 00:13:16 60 4
gpt4 key购买 nike

在我最新的应用程序更新中,有一些用户提示崩溃,我设法拿到了崩溃报告。以下是符号化崩溃日志中的崩溃原因。

Exception Type:  EXC_CRASH (SIGKILL)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Reason: Namespace SPRINGBOARD, Code 0x8badf00d
Triggered by Thread: 0

当我调用[NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error:]

时会发生这种情况

这是完整的堆栈跟踪:

Thread 0 name:  Dispatch queue: SQLQueue 0x12fecca10 for .database.db.migrationdestination_41b5a6b5c6e848c462a8480cd24caef3
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x0000000180640164 __fcntl + 8
1 libsystem_kernel.dylib 0x0000000180625660 fcntl + 84
2 libsqlite3.dylib 0x0000000181ba3f90 0x181b3d000 + 421776
3 libsqlite3.dylib 0x0000000181bb9e50 0x181b3d000 + 511568
4 libsqlite3.dylib 0x0000000181bcdf34 0x181b3d000 + 593716
5 libsqlite3.dylib 0x0000000181bcdd98 sqlite3_wal_checkpoint_v2 + 492
6 libsqlite3.dylib 0x0000000181ba41b0 0x181b3d000 + 422320
7 libsqlite3.dylib 0x0000000181b7b288 sqlite3_step + 976
8 CoreData 0x000000018391b194 _execute + 164
9 CoreData 0x000000018394ffd8 -[NSSQLiteConnection commitTransaction] + 312
10 CoreData 0x0000000183a6ced8 __43-[_NSSQLiteStoreMigrator performMigration:]_block_invoke + 2784
11 CoreData 0x0000000183a36cbc __37-[NSSQLiteConnection performAndWait:]_block_invoke + 40
12 libdispatch.dylib 0x00000001804fe9a0 _dispatch_client_callout + 16
13 libdispatch.dylib 0x000000018050bee0 _dispatch_barrier_sync_f_invoke + 84
14 CoreData 0x0000000183a36c08 -[NSSQLiteConnection performAndWait:] + 144
15 CoreData 0x0000000183a6c35c -[_NSSQLiteStoreMigrator performMigration:] + 184
16 CoreData 0x0000000183a63db0 -[NSSQLiteInPlaceMigrationManager migrateStoreFromURL:type:options:withMappingModel:toDestinationURL:destinationType:destinationOptions:error:] + 1912
17 CoreData 0x00000001839ee814 -[NSMigrationManager migrateStoreFromURL:type:options:withMappingModel:toDestinationURL:destinationType:destinationOptions:error:] + 556
18 CoreData 0x0000000183a5f090 -[NSStoreMigrationPolicy(InternalMethods) migrateStoreAtURL:toURL:storeType:options:withManager:error:] + 324
19 CoreData 0x0000000183a5e3ec -[NSStoreMigrationPolicy migrateStoreAtURL:withManager:metadata:options:error:] + 120
20 CoreData 0x0000000183a5fb08 -[NSStoreMigrationPolicy(InternalMethods) _gatherDataAndPerformMigration:] + 2440
21 CoreData 0x00000001839fc188 __91-[NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error:]_block_invoke + 4160
22 CoreData 0x0000000183a08630 gutsOfBlockToNSPersistentStoreCoordinatorPerform + 168
23 libdispatch.dylib 0x00000001804fe9a0 _dispatch_client_callout + 16
24 libdispatch.dylib 0x000000018050bee0 _dispatch_barrier_sync_f_invoke + 84
25 CoreData 0x00000001839f7d70 _perform + 200
26 CoreData 0x000000018390d5e4 -[NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error:] + 388

我没有关于崩溃的更多细节。只是它发生在少数用户而不是全部用户身上。我不知道如何重现它以获得正确的修复。用户报告说该应用程序启动后“卡住”了一段时间,然后崩溃了。而且它一直这样做。

自发布应用程序以来,我查看了核心数据模型的最新版本,这个文件仍然完全相同。在开发过程中,我在中间添加了 5 个版本,但这应该不是问题吧?更新前应用程序中的版本未受影响...

编辑:我对模型所做的更改只是在现有实体上添加一些新属性。但是,如果自动迁移失败,那么每个人都会失败,对吗?不只针对少数用户?!?

所以我希望这里的人可能已经遇到了同样的问题以及如何解决它的解决方案。或者至少是一种在应用程序不崩溃的情况下检测问题的方法。然后我可以为这些用户重新创建数据库...

最佳答案

核心数据迁移可能需要时间。如果您的第一个 View 加载时间太长,那么看门狗将杀死您的应用程序。当您的用户拥有的数据比您预期的多时,就会发生这种情况。相反,添加一个迁移检查器。如果您需要进行迁移,请在加载商店时显示带有加载动画的加载 UI。

-(BOOL) storeNeedsMigrationAtURL:(NSString*) sourceStorePath{
if (![[NSFileManager defaultManager] fileExistsAtPath:sourceStorePath]) {
// Database doesn't yet exist. No need to test data compatibility"
return NO;
}
NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:"<Your models directory name>" ];
NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];

NSError *error = nil;
NSURL *sourceStoreURL = [NSURL fileURLWithPath:sourceStorePath];
NSDictionary *sourceStoreMetadata = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType:NSSQLiteStoreType URL:sourceStoreURL options:nil error:&error];

// Do error checking... Removed from the code sample.
NSManagedObjectModel *destinationModel = [psc managedObjectModel];
BOOL isCompatible = [destinationModel isConfiguration:nil
compatibleWithStoreMetadata:sourceStoreMetadata];

return isCompatible;
}

参见https://vimeo.com/89370886约55分钟你也可以阅读 https://hamishrickerby.com/2012/06/04/core-data-migrations-and-large-data-sets/

关于ios - 核心数据迁移崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45825962/

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