2012-07-22 69 views
0

我有一个可以导入和导出数据的核心数据模型。我的应用程序的工作方式是从数据库下载JSON文件,解析它,刷新核心数据模型,然后再次添加数据(实际上刷新本地数据模型)。核心数据直到应用程序重新启动才会更改

如果我对数据库进行了更改,则更改将反映在JSON文件中,但在重新启动(又名结束应用程序,再次打开)应用程序之前,不会反映在核心数据模型中。

我确定它必须与我冲洗数据库的方式有关,但我不能把它放在手指上。我在下面列出了一些代码来提供帮助。

我使用冲洗掉数据模型的方法:

我使用,将数据添加到数据模型的代码
- (void)resetCoreData; 
{  
    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"AppWithCoreData.sqlite"]; 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    [fileManager removeItemAtURL:storeURL error:NULL]; 

    NSError* error = nil; 

    if([fileManager fileExistsAtPath:[NSString stringWithContentsOfURL:storeURL encoding:NSASCIIStringEncoding error:&error]]) 
    { 
     [fileManager removeItemAtURL:storeURL error:nil]; 
    } 

    persistentStoreCoordinator = nil; 
    managedObjectContext = nil; 

    [self managedObjectContext]; // Rebuild Object Context  
} 

一行:

[model setValue:[dictionary objectForKey:@"eventID"] forKey:@"eventID"]; 
+0

之后您会重新提取数据吗?也看看这个:http://stackoverflow.com/a/5770216/730701。唯一的区别是,在将上下文设置为nil之前删除文件,然后该用户执行此操作。 – Adam 2012-07-22 15:52:57

+0

是的,我调用这个方法,然后重新获取数据。它保存没有任何错误。当我在设置上下文后移动这两行后尝试保存时,出现错误 无法保存:操作无法完成。 (可可错误134030.) – 2012-07-22 16:55:50

回答

2

通常,当您需要将更改保存到核心数据存储区时,您需要保存它们。

为了达到这个目的,你需要调用

NSError* error = nil; 
[managedObjectContext save:&error]; 

以这种方式改变已执行保存到磁盘。事实上,当你只是改变一个特定实体的属性值时,它只能在内存中使用。

我想只有在下次重新启动时才能使用这些更改,因为在您的应用程序委托中您可以监听applicationWillTerminate委托,并且您可以保存上下文。您是否使用Xcode模板提供的Core Data Stack?

如果可能提供更多的细节,也许我可以帮你。

希望有所帮助。

+0

对不起,我打电话保存,我只是愚蠢地把它留下。我没有使用核心数据模板,之后我添加了Core Data。关于核心数据的其他一切工作,但这。感谢您一直以来的帮助。 – 2012-07-22 16:53:43

+0

@AlexGodbehere你能提供一些其他的细节吗? – 2012-07-22 16:55:34

+0

好的,我有一个更新。我已经在应用程序启动后下载了模型中的数据,但是在我通常删除数据并添加新数据之前。结果...空。所以数据不能被保存在首位。我觉得这很奇怪,因为它没有报告错误。你还喜欢什么其他信息? – 2012-07-22 17:16:24

相关问题