Core Data 堆栈

来源:互联网 发布:怎样利用网络学英语 编辑:程序博客网 时间:2024/06/01 19:58

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
原创粉丝点击