核心数据不保存我的数据(Core data not saving my data)

2019-07-03 18:26发布

我使用的核心数据,来节省一些整数(率),然后我把保存的背景下:

HeartRateBeat * beat = [HeartRateBeat heartRateWithHeartRate:rate
                            ofRecordTitle:self.recordTitle
                   inManagedObjectContext:document.managedObjectContext];

NSError * error;
[document.managedObjectContext save:&error];

这里面方便的方法创建使用NSEntityDescription这样的对象:

heartRateBeat = [NSEntityDescription insertNewObjectForEntityForName:@"HeartRateBeat" inManagedObjectContext:context];

(我只是复制了一些重要的代码,只是为了证明我所做的。)

我立刻执行获取每一个心脏跳动插入和保存的管理对象上下文(我立即保存)之后请求,请求表明,心脏的跳动确实出现了存储核心数据内(日益增长的心脏搏动的阵列),但如果我重新启动我的应用程序(我使用模拟器BTW)我知道的东西,因为它重新启动实际上没有得到保存到磁盘。 与sqlite3的命令行检查显示为空表。 我缺少的是在这里吗?

Answer 1:

我得到了同样的问题,但我认为它只是因为,我认为,像我这样的你只是停止通过Xcode的应用程序,而不是真正关闭它。 我用这个代码来强制执行写入。 使用UIManagedDocument IM,通过的appdelegate共享,而不是手动设置一切。

NSError *error = nil;

if (![self.managedObjectContext save:&error]) {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}

[[AppDelegate sharedAppDelegate].userDatabase saveToURL:[AppDelegate sharedAppDelegate].userDatabase.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:nil];


Answer 2:

我不知道你们这些家伙,但是当我想要我的核心数据拯救,我的核心数据更好的保存。

下面是一些代码,将肯定保存所有的核心数据单项的。

-(void)forceSave {
        NSManagedObjectContext * context = self.managedObjectContext; //Get your context here. 
    if (!context) {
        NSLog(@"NO CONTEXT!");
        return;
    }

    NSError * error;
    BOOL success = [context save:&error];
    if (error || !success) {
        NSLog(@"success: %@ - error: %@", success ? @"true" : @"false", error);
    }

    [context performSelectorOnMainThread:@selector(save:) withObject:nil waitUntilDone:YES];
    [context performSelector:@selector(save:) withObject:nil afterDelay:1.0];
    [context setStalenessInterval:6.0];
    while (context) {
        [context performBlock:^(){
            NSError * error;
            bool success =  [context save:&error];
            if (error || !success)
                NSLog(@"success: %@ - error: %@", success ? @"true" : @"false", error);

        }];
        context = context.parentContext;
    }

    NSLog(@"successful save!");

}

请注意,这是错误代码。 在其他的问题,它不是线程安全的,耗时过长。 然而,尝试使用这种和删除它的某些部分,让您满意:)



文章来源: Core data not saving my data