#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
//数据模型对象
@property (strong, nonatomic) NSManagedObjectModel *managedObjectModel;
//上下文对象
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
//持久化存储区
@property (strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
@end
---------------------------------------------------------
-(NSManagedObjectContext *)managedObjectContext
{
//如果上下文对象已经创建,就直接返回创建的对象
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
// 先取得创建好的调度对象
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
//如果成功创建调度对象,就在此基础上创建上下文对象
if (coordinator != nil) {
_managedObjectContext = [[NSManagedObjectContext alloc] init];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return _managedObjectContext;
}
-(NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
//如果已经创建好调度对象,则直接返回对象
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}
//得到数据库的路径
NSString *docs = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
//指定数据库文件名称
NSURL *storeUrl = [NSURL fileURLWithPath:[docs stringByAppendingPathComponent:@"linkman.sqlite"]];
NSError *error = nil;
//NSLog(@"storeUrl:%@", storeUrl);
//创建调度对象实例,并设置使用的数据模型
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
//告诉调度对象物理数据库文件的位置
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]) {
NSLog(@"%@, %@", error, [error userInfo]);
}
return _persistentStoreCoordinator;
}
//managedObjectModel初始化访问方法
-(NSManagedObjectModel *)managedObjectModel
{
//如果已经创建了数据模型对象则直接返回
if (_managedObjectModel != nil) {
return _managedObjectModel;
}
_managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
return _managedObjectModel;
// NSLog(@"%d", _managedObjectContext.retainCount);
}