现在的位置: 首页 > 综合 > 正文

IOS Master-Detail Template Application Demo 解析

2013年09月01日 ⁄ 综合 ⁄ 共 4492字 ⁄ 字号 评论关闭

本文需要具备一定的core data基础。

如下图,新建project,选择Master-Detail  Application类型的模版

命名为MasterCoreData,勾选Use Core Data和Use Automatic Reference Counting

在模拟器上试运行此工程,结果如下:

点击右上角的添加按钮,结果如下:

再次点击右上角的添加按钮,结果如下:

点击左上角编辑按钮,进入删除编辑模式,如下图:

试一试其他操作,没有崩溃产生,啊,原来xcode已经为我们实现了这么多!

接下来,我们就去看一看到底xcode为我们自动添加了哪些代码,这些代码之间的调用关系是什么。let`s go!

工程目录下多出一个名为MasterCoreData.xcdatamodeld的文件,如图:

点击右下角Editor Style,转换为另一种显示方式,如下图:

AppDelegate.h中比普通的情况下多出了下列代码:

@property (readonly,
strong, nonatomic) NSManagedObjectContext *managedObjectContext;

@property (readonly,
strong, nonatomic) NSManagedObjectModel *managedObjectModel;

@property (readonly,
strong, nonatomic)
NSPersistentStoreCoordinator
*persistentStoreCoordinator;

- (void)saveContext;

- (NSURL *)applicationDocumentsDirectory;

AppDelegate.m中比普通的情况下多出了下列代码:

- (void)saveContext

{

    NSError *error = nil;

    NSManagedObjectContext *managedObjectContext =
self.managedObjectContext;

    if (managedObjectContext !=
nil
) {

        if ([managedObjectContext
hasChanges
] && ![managedObjectContext save:&error]) {

             // Replace this implementation with code to handle the error appropriately.

             // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 

            NSLog(@"Unresolved error %@, %@", error, [error
userInfo]);

            abort();

        } 

    }

}

#pragma mark - Core Data stack

// Returns the managed object context for the application.

// If the context doesn't already exist, it is created and bound to the persistent store coordinator for the application.

- (NSManagedObjectContext *)managedObjectContext

{

    if (_managedObjectContext !=
nil) {

        return
_managedObjectContext;

    }

    

    NSPersistentStoreCoordinator *coordinator = [self
persistentStoreCoordinator];

    if (coordinator != nil) {

        _managedObjectContext = [[NSManagedObjectContext
alloc] init];

        [_managedObjectContext
setPersistentStoreCoordinator:coordinator];

    }

    return
_managedObjectContext;

}

// Returns the managed object model for the application.

// If the model doesn't already exist, it is created from the application's model.

- (NSManagedObjectModel *)managedObjectModel

{

    if (_managedObjectModel !=
nil) {

        return
_managedObjectModel;

    }

    NSURL *modelURL = [[NSBundle
mainBundle] URLForResource:@"MasterCoreData"
withExtension:@"momd"];

    _managedObjectModel = [[NSManagedObjectModel
alloc] initWithContentsOfURL:modelURL];

    return
_managedObjectModel;

}

// Returns the persistent store coordinator for the application.

// If the coordinator doesn't already exist, it is created and the application's store added to it.

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator

{

    if (_persistentStoreCoordinator !=
nil) {

        return
_persistentStoreCoordinator;

    }

    

    NSURL *storeURL = [[self
applicationDocumentsDirectory] URLByAppendingPathComponent:@"MasterCoreData.sqlite"];

    

    NSError *error = nil;

    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator
alloc] initWithManagedObjectModel:[self
managedObjectModel]];

    if (![_persistentStoreCoordinator
addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storeURL options:nil
error:&error]) {

        /*

         Replace this implementation with code to handle the error appropriately.

         

         abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 

         

         Typical reasons for an error here include:

         * The persistent store is not accessible;

         * The schema for the persistent store is incompatible with current managed object model.

         Check the error message to determine what the actual problem was.

         

         

         If the persistent store is not accessible, there is typically something wrong with the file path. Often, a file URL is pointing into the application's resources directory instead of a writeable directory.

         

         If you encounter schema incompatibility errors during development, you can reduce their frequency by:

         * Simply deleting the existing store:

         [[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil]

         

         * Performing automatic lightweight migration by passing the following dictionary as the options parameter:

         @{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES}

         

         Lightweight migration will only work for a limited set of schema changes; consult "Core Data Model Versioning and Data Migration Programming Guide" for details.

         

         */

        NSLog(@"Unresolved error %@, %@", error, [error
userInfo]);

        abort();

    }    

    

    return
_persistentStoreCoordinator;

}

#pragma mark - Application's Documents directory

// Returns the URL to the application's Documents directory.

- (NSURL *)applicationDocumentsDirectory

{

    return [[[NSFileManager
defaultManager] URLsForDirectory:NSDocumentDirectory
inDomains:NSUserDomainMask]
lastObject];

}

抱歉!评论已关闭.