Jas*_*son 5 sqlite iphone core-data ios
我正在为我的应用程序开发一个备份/恢复系统,用户可以在其中下载核心数据存储(sqlite文件)的备份版本,并用下载的文件替换当前使用的数据存储.但是,一旦用户下载文件并替换当前数据存储,则没有任何数据显示已更新.但是当应用程序退出并重新启动时,恢复的数据可用.如何强制我的应用重新加载核心数据存储的文件?
我试图从我的UIViewController访问应用程序委托,它恢复数据,像这样,重建核心数据堆栈并在导航堆栈中的所有视图控制器上传播它:
MyAppDelegate *app = [[UIApplication sharedApplication] delegate];
app.managedObjectContext = nil;
app.persistentStoreCoordinator = nil;
app.managedObjectModel = nil;
managedObjectContext = [app managedObjectContext];
NSArray *controllers = [self.navigationController viewControllers];
UIViewController *c;
for (int i = 0; i < [controllers count]; i++) {
c = [controllers objectAtIndex:i];
[c setManagedObjectContext:managedObjectContext];
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用,它只会在我返回到根视图控制器时抛出以下错误: 'The NSManagedObject with ID:0x5d79060 <x-coredata://D8E73D64-C9BA-4CFA-9213-F8BD61749155/MyObject/p2> has been invalidated.'
有谁知道如何强制应用程序重新加载数据并开始使用新的数据存储文件?
我认为让您陷入困境的是,即使您可以将所有托管对象上下文、存储协调器等设置为nil,您仍然必须完全重新创建基于这些对象的每个正在使用的托管对象。
最好的选择是做你现在正在做的事情,但也要找到一种方法来销毁你使用过的每个核心数据对象。也许您可以将各种视图控制器弹出到根目录并从头开始重新加载该控制器,以便它使用新的核心数据堆栈?您将失去一定程度的用户友好性(因为他们必须使用您加载的新数据重建视图控制器堆栈),但您可以确定您已经销毁了所需的所有内容。
| 归档时间: |
|
| 查看次数: |
1538 次 |
| 最近记录: |