Ios 核心数据在应用程序重新启动之前不会更改

Ios 核心数据在应用程序重新启动之前不会更改,ios,xcode,core-data,dictionary,nsfetchrequest,Ios,Xcode,Core Data,Dictionary,Nsfetchrequest,我有一个核心数据模型,可以很好地导入和导出数据。我的应用程序的工作方式是从数据库下载一个JSON文件,解析它,刷新核心数据模型,然后再次添加数据(实际上是刷新本地数据模型) 如果我对数据库进行了更改,更改将反映在JSON文件中,但在我重新启动(也称为结束应用程序,再次打开)应用程序之前,不会反映在核心数据模型中 我肯定这和我刷新数据库的方式有关,但我就是摸不着。我在下面提供了一些代码来帮助您 我用来清除数据模型的方法: - (void)resetCoreData; { NSURL

我有一个核心数据模型,可以很好地导入和导出数据。我的应用程序的工作方式是从数据库下载一个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"];
我用于将数据添加到数据模型的一行代码:

- (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"];

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

要实现它,你需要打电话

NSError* error = nil;
[managedObjectContext save:&error];
以这种方式,您执行的更改将保存到磁盘。事实上,例如,当您简单地更改特定实体上属性的值时,它仅在内存中可用

我认为这些更改仅在下次重新启动时可用,因为在应用程序委托中,您侦听的
应用程序将终止
委托,并在那里保存上下文。您是否使用Xcode模板提供的核心数据堆栈

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


希望这能有所帮助。

之后是否重新提取数据?再看看这个:。唯一的区别是,在将context设置为nil之前删除该文件,然后那个家伙再删除。是的,我调用这个方法,然后重新获取数据。它保存时没有任何错误。当我在设置上下文后移动这两行之后尝试保存时,我得到一个错误:无法保存:操作无法完成。(可可错误134030)对不起,我打电话给save,我只是愚蠢地忽略了这一点。我没有使用核心数据模板,我后来添加了核心数据。关于核心数据的其他一切都是有效的,但这一点。谢谢你的帮助。@AlexGodbehere你能提供一些其他细节吗?好的,我有最新消息。我在应用程序启动后下载了模型中的数据,但通常在我删除数据并添加新数据之前。结果。。。空的。因此,数据一开始就不能保存。我觉得这很奇怪,因为它没有报告错误。你还想要什么其他信息?@AlexGodbehere抱歉耽搁了。你能把你的问题扩展到你所尝试的吗?你说的数据一开始就不能保存是什么意思?谢谢,当然!基本上,我的应用程序中有一个登录屏幕,当用户使用该屏幕登录时,会显示主视图控制器。在这个VC的didLoad方法中,我从服务器下载数据,解析JSON文件,“刷新”数据模型并导入新下载的数据。我已将调试“将数据模型打印到控制台”添加到此视图控制器。初次下载后按此键,将显示反映服务器数据的正确数据。例如,我现在将删除服务器上的一条记录。