核心数据不保存我的数据

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

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

在那个方便的方法里面,我使用NSEntityDescription来创build对象:

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

(我只复制了一些重要的代码,只是为了展示我做了什么。)

我立即执行一个获取请求后,每插入一个心跳和pipe理的对象上下文保存(我立即保存),请求显示心跳确实似乎存储在核心数据(心跳数越来越多),但如果我重新启动我的应用程序(我使用模拟器顺便说一句)我知道事实上并没有实际得到保存到磁盘,因为它重新启动。 用SQLite3命令行检查显示空表。 我在这里错过了什么?

我遇到了同样的问题,但我认为它只是因为,我认为,像我一样,你只是通过xcode停止应用程序,而不是实际上closures它。 我使用这个代码来强制写入。 我使用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!"); } 

请注意,这是不良的代码。 除了其他问题,它不是线程安全的,需要很长时间。 但是,尝试使用这个并删除它的一些部分,以您满意:)