我是CoreData的新手,我想知道我是否做得对.首先文档说:
“按照惯例,您从视图控制器获取上下文.但您必须适当地实现应用程序,以遵循此模式.
实现与Core Data集成的视图控制器时,可以添加NSManagedObjectContext属性.
创建视图控制器时,将它传递给它应该使用的上下文.您传递现有上下文,或者(在您希望新控制器管理一组离散编辑的情况下)为您创建的新上下文.应用程序委托通常负责创建一个上下文以传递给显示的第一个视图控制器.“
https://developer.apple.com/library/ios/documentation/DataManagement/Conceptual/CoreDataSnippets/Articles/stack.html
所以我要做的是为我的NSManagedObjectContext创建一个属性:
MyViewController.H @interface MyViewController : ViewController { NSManagedObjectContext *moc; } @property (nonatomic,retain) NSManagedObjectContext *moc; @end MyViewController.m @implementation MyViewController @synthesize moc=moc;
1. – 我想做的任何地方都会对数据库进行一些更改.
MainNexarAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; self.moc = [[NSManagedObjectContext alloc] init]; self.moc.persistentStoreCoordinator = [appDelegate persistentStoreCoordinator]; /*code**/ [self.moc save:&error];
2 – .如果我要在不同的线程中工作,我有自定义方法来创建带有NSPrivateQueueConcurrencyType的NSManagedObjectContext,因此可以在私有队列中进行管理:
//Myclass NSObject<br> -(NSManagedObjectContext *)createManagedObjectContext{ MainNexarAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; NSPersistentStoreCoordinator *coordinator = [appDelegate persistentStoreCoordinator]; if (coordinator != nil) { __managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; [__managedObjectContext setPersistentStoreCoordinator:coordinator]; } return __managedObjectContext; } //__managedObjectContext is my property from the .h file //@property (readonly,strong,nonatomic) NSManagedObjectContext* managedObjectContext;
>一个好的做法是为每个视图控制器创建一个NSManagedObjectContext,在那里你将对数据库进行一些更改?
1.1.使用[UIApplication sharedApplication]来获取持久的NSPersistentStoreCoordinator形成appdelegate是一种有效的方法吗?
>在主线程和任何其他线程之间共享持久存储协调器是安全的吗?
任何帮助将不胜感激 :).