Core Data 堆栈
对象 说明 NSManagedObjectContext 被管理对象上下文类,在上下文中可以查找,删除,和插入对象,然后通过栈同步到持久化存储对象 NSManagedObjectModel 被管理对象模型类,是系统中的”实体”,与数据库中的表等对象对应 NSPersistentStoreCoordinator 持久化存储协调器类,在持久化存储之上提供一个接口,可以把它考虑成为数据库的连接
代码
SYDBManager.h
@interface SYDBManager : NSObject
@property (nonatomic , copy) NSString * xcdatamodeldName;
@property (nonatomic , strong) NSManagedObjectContext * managedObjectContext;
@property (nonatomic , strong) NSManagedObjectModel * managedObjectModel;
@property (nonatomic , strong) NSPersistentStoreCoordinator * persistentStoreCoordinator;
-(NSURL *)applicationDocumentDirectory;
@end
SYDBManager.m
#import "SYDBManager.h"
@implementation SYDBManager
-(void)saveContext {
NSError * error = nil;
NSManagedObjectContext * managedObjectContext = [self managedObjectContext];
if (managedObjectContext != nil) {
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
NSLog(@"Unresolved error: %@, %@ .",error,[error userInfo]);
abort();
}
}
}
-(NSURL *)applicationDocumentDirectory {
NSURL * documentDirectoryURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
return documentDirectoryURL;
}
-(NSManagedObjectContext *)managedObjectContext {
if (_managedObjectContext) {
return _managedObjectContext;
}
NSPersistentStoreCoordinator * coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
_managedObjectContext = [[NSManagedObjectContext alloc] init];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return _managedObjectContext;
}
-(NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (_persistentStoreCoordinator) {
return _persistentStoreCoordinator;
}
if (self.xcdatamodeldName == nil) {
return nil;
}
NSURL * storeURL = [[self applicationDocumentDirectory] URLByAppendingPathComponent:[NSString stringWithFormat:@"%@.sqlite",self.xcdatamodeldName]];
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
[_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:nil];
return _persistentStoreCoordinator;
}
-(NSManagedObjectModel *)managedObjectModel {
if (_managedObjectModel) {
return _managedObjectModel;
}
if (self.xcdatamodeldName == nil) {
return nil;
}
NSBundle * mainBundle = [NSBundle mainBundle];
NSURL * url = [mainBundle URLForResource:self.xcdatamodeldName withExtension:@"momd"];
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:url];
return _managedObjectModel;
}
@end