Ios 核心数据不保存我的数据

Ios 核心数据不保存我的数据,ios,core-data,ios6,Ios,Core Data,Ios6,我使用核心数据保存一些整数(速率),然后在上下文中调用save: HeartRateBeat * beat = [HeartRateBeat heartRateWithHeartRate:rate ofRecordTitle:self.recordTitle inManagedObjectContext:document.managedObjectContext]; NSError * error;

我使用核心数据保存一些整数(速率),然后在上下文中调用save:

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命令行检查将显示空表。我在这里遗漏了什么?

我也遇到了同样的问题,但我认为这只是因为,我认为,就像我一样,你只是通过xcode停止应用程序,而不是真正关闭它。我使用此代码强制写入。我使用UIManagedDocument,通过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];

我不知道你们的情况,但当我想保存我的核心数据时,我的核心数据最好保存

这里有一些代码可以确保保存所有的核心数据

-(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!");

}

请注意,这是错误的代码。在其他问题中,它不是线程安全的,而且耗时太长。但是,请尝试使用此选项并删除其中的某些部分,直到您满意为止:)

是的,我总是退出模拟器。我在插入的每一行的上面代码上调用
[managedObjectContext save::
。但是我并没有调用UIDocument的
for saveOperation:completionHandler:
,如果数据库中已经有东西,这不是写了所有东西吗?结果证明这是可行的。谢谢所以UIDocumentSaveForOverwriting并不是真正的“覆盖”?我没有遇到任何性能问题,但我的数据集不是“大的”