Objective c 为什么应用程序找不到我的核心数据文件还原?

Objective c 为什么应用程序找不到我的核心数据文件还原?,objective-c,core-data,ios8.1,magicalrecord-2.2,Objective C,Core Data,Ios8.1,Magicalrecord 2.2,已更新:我正在尝试备份和恢复我的核心数据文件(使用基于的日志记录和MagicalRecord)。在iOS模拟器下运行时,我知道从上次执行应用程序开始,每次都会移动文件。是完整的代码(我把它放在这里是因为它很长,现在它的格式和语法突出显示,使它更容易阅读) 当应用程序启动时,我可以找到新位置,检索存储的文件并从Documents目录中的文件执行还原,将它们放置在由NSLog语句的控制台输出确定的正确新位置(它不显示正在还原的-shm文件,但它已还原到同一位置) AppDelegate sqlite

已更新:我正在尝试备份和恢复我的核心数据文件(使用基于的日志记录和MagicalRecord)。在iOS模拟器下运行时,我知道从上次执行应用程序开始,每次都会移动文件。是完整的代码(我把它放在这里是因为它很长,现在它的格式和语法突出显示,使它更容易阅读)

当应用程序启动时,我可以找到新位置,检索存储的文件并从Documents目录中的文件执行还原,将它们放置在由NSLog语句的控制台输出确定的正确新位置(它不显示正在还原的-shm文件,但它已还原到同一位置)

AppDelegate sqliteFilePath:/Users/rolfmarsh/Library/Developer/CoreSimulator/Devices/1EE69744-255A-45CD-88F1-63FEAD117B32/data/Containers/data/Application/B424CA1A-D41C-488D-A7E9-0F13CB2244B3/Library/Application Support/SalonBook

SVC sqliteFilePath:/Users/rolfmarsh/Library/Developer/CoreSimulator/Devices/1EE69744-255A-45CD-88F1-63FEAD117B32/data/Containers/data/Application/B424CA1A-D41C-488D-A7E9-0F13CB2244B3/Library/Application Support/SalonBook

文档基本路径:/Users/rolfmarsh/Library/Developer/CoreSimulator/Devices/1EE69744-255A-45CD-88F1-63FEAD117B32/data/Containers/data/Application/B424CA1A-D41C-488D-A7E9-0F13CB2244B3/文档

起始-存储路径:/Users/rolfmarsh/Library/Developer/CoreSimulator/Devices/1EE69744-255A-45CD-88F1-63FEAD117B32/data/Containers/data/Application/B424CA1A-D41C-488D-A7E9-0F13CB2244B3/Library/Application Support/SalonBook/saori.sqlite

完了!storePath:/Users/rolfmarsh/Library/Developer/CoreSimulator/Devices/1EE69744-255A-45CD-88F1-63FEAD117B32/data/Containers/data/Application/B424CA1A-D41C-488D-A7E9-0F13CB2244B3/Library/Application Support/SalonBook/saori.sqlite-wal

启动恢复时,我会发出:

[MagicalRecord cleanUp];  //  disable Core Data
完成恢复后,我将发出以下命令:

[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:@"saori.sqlite"];  //  enable Core Data migration
defaultContext = [NSManagedObjectContext MR_defaultContext];   //  set default NSManagedObjectContext for MagicalRecord

当我查看应该在核心数据存储中的记录时(使用SQLite浏览器),它们在SQLite文件(saori.SQLite)中,但它们不会出现在应用程序中!这就好像MR堆栈没有正确设置,或者默认上下文不知何故被破坏了。你知道怎么解决这个问题吗?

好的,在做了一点刺激和戳一下之后,我相信
+[MagicalRecord cleanUp]
需要一些爱。基本上,发布持久存储协调器时不需要首先删除SQLite持久存储

正如您在我们的另一次对话中提到的,您需要重置托管对象上下文:

[[NSManagedObjectContext MR_defaultContext] reset];
然后迭代所有持久存储以删除它们:

NSError *error;
NSPersistentStoreCoordinator *persistentStoreCoordinator = [NSPersistentStoreCoordinator MR_defaultStoreCoordinator];
for (NSPersistentStore *store in [persistentStoreCoordinator persistentStores]) {
    BOOL removed = [persistentStoreCoordinator removePersistentStore:store error:&error];

    if (!removed) {
        NSLog(@"Couldn't remove persistent store: %@", error);
    }
}

在这之后,调用
[MagicalRecord cleanUp]
,然后恢复整个堆栈是安全的(尽管您可以选择只将更新的持久存储连接到协调器,而不是完全清除所有内容)。

当您清理并随后恢复核心数据堆栈时,你如何让你的用户界面知道它?我刚刚运行了另一个测试;sqlite文件中有数据,只是没有正确还原(我在Finder中检查了这些文件,使用sqlite浏览器查看了内容,并在运行应用程序时根据控制台日志验证了文件名,它们是相同的!)。。无论我重新启动应用程序多少次,数据都不会显示在应用程序中。。。很奇怪!