IOS Master-Detail Template Application Demo 解析

來源:互聯網
上載者:User

本文需要具備一定的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];

}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.