CoreData 的数据持久性

Posted

技术标签:

【中文标题】CoreData 的数据持久性【英文标题】:Data Persistence with CoreData 【发布时间】:2012-06-07 09:00:33 【问题描述】:

大家好,我在使用 CoreData Persistence 时遇到问题,我的问题是,当我启动我的应用程序时,我设法将一些数据(来自应用程序内的表单)添加到我的数据库并使用 NSLog 显示它们。 但实际上我认为当我停止 ipad 模拟器并重新启动它时,所有这些数据都会消失..

所以我真的不知道它是来自我的代码还是因为模拟器。 我制作了一个图表来向您展示我的应用程序和我的实体的架构:

问题是我使用不同的 viewController,所以我需要将 ManagedObjectModel 传递给每个。我的表单在 newDocumentViewController 中,当我添加一些实体时,我想在所有其他 viewController 中访问它们并将其保存到应用程序本地存储中。

这里有一些代码给你看一下:

AppDelegate.m

@synthesize managedObjectContext = __managedObjectContext;
@synthesize managedObjectModel = __managedObjectModel;
@synthesize persistentStoreCoordinator = __persistentStoreCoordinator;


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.

    DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
    UINavigationController *detailNavigationController = [[UINavigationController alloc] initWithRootViewController:detailViewController];

    MasterViewController *masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil];
    UINavigationController *masterNavigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController];

    masterViewController.managedObjectContext = self.managedObjectContext;    
    detailViewController.managedObjectContext = self.managedObjectContext;

我在每个 masterViewController 和 DetailViewController(以及从 DetailViewController 到 NewDocumenViewController)中都有这些属性来接收 objectContext

@property (nonatomic,strong) NSManagedObjectContext *managedObjectContext;

因此,我真的不知道如何从每个控制器访问我的数据,并且数据是否通过以下方式存储在本地:

NewDocumentController.m

-(void) addNewDocument:(NSString*)name with_niveau:(NSInteger)level
    Document *doc = [NSEntityDescription insertNewObjectForEntityForName:@"Document" inManagedObjectContext:managedObjectContext];
    doc.nom=name;
    doc.niveau=[NSNumber numberWithInteger:level];

-(void) addNewDocument_info:(NSString*)name with_createur:(NSString*)createur with_dateModif:(NSDate*)date1 with_status:(BOOL)etat

    DocumentInfo *doc_info = [NSEntityDescription insertNewObjectForEntityForName:@"DocumentInfo" inManagedObjectContext:managedObjectContext];

    doc_info.nom =name;
    doc_info.createur=createur;
    doc_info.date_creation=[NSDate date];
    doc_info.date_modification=date1;
    doc_info.status= [NSNumber numberWithBool:etat];

【问题讨论】:

【参考方案1】:

你需要保存你的数据:

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

【讨论】:

以上是关于CoreData 的数据持久性的主要内容,如果未能解决你的问题,请参考以下文章

CoreData:持久和临时存储

iOS 数据持久化 CoreData

iOS 数据持久化 CoreData

(CoreData) MagicalRecord 突然停止持久保存

CoreData 多个持久存储协调器?

如何将 CoreData SQLite 支持的持久存储克隆到“内存中”?