我对 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] 从 appdelegate 获取持久的 NSPersistentStoreCoordinator 是一种有效的方法吗? - 在主线程和任何其他线程之间共享持久存储协调器是安全的吗?
任何帮助将不胜感激 :)。