iOS開發學習之Core Data

來源:互聯網
上載者:User

標籤:

1.添加DataModel檔案

2.添加實體和屬性

3.建立NSManagedObject的子類,這裡命名為Location(若沒有實體屬性類型是Transformable或沒有額外的方法,只需要儲存基本類型的話,可略過)  注意:這裡可以做一個額外的工作,在Location+CoreDataProperties.h檔案中,將實體屬性類型是Transformable對應的@property屬性的類型從id改為需要的類型4.在AppDelegate.m檔案添加以下代碼:

@interface AppDelegate () 

 

@property (nonatomic,strong) NSManagedObjectContext *managedObjectContext;

@property (nonatomic,strong) NSManagedObjectModel *managedObjectModel;

@property (nonatomic,strong) NSPersistentStoreCoordinator *persistentStoreCoordinator;

 

@end

5.在AppDelegate.m檔案的@implementation底部添加以下代碼:

#pragma mark - Core Data

 

-(NSManagedObjectModel *)managedObjectModel

{

    if(_managedObjectModel == nil)

    {

        NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"DataModel" ofType:@"momd"];

        NSURL *modelURL = [NSURL fileURLWithPath:modelPath];

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

    }

    return _managedObjectModel;

}

 

-(NSString *)documentsDirectory

{

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    NSString *documentsDirectory = [paths lastObject];

    //NSLog(@"%@",documentsDirectory);

    return documentsDirectory;

}

 

-(NSString *)dataStorePath

{

    return [[self documentsDirectory] stringByAppendingPathComponent:@"DataStore.sqlite"];

}

 

-(NSPersistentStoreCoordinator *)persistentStoreCoordinator

{

    if(_persistentStoreCoordinator == nil)

    {

        NSURL *storeURL = [NSURL fileURLWithPath:[self dataStorePath]];

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

        

        NSError *error;

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

        {

            NSLog(@"Error adding persistent store %@,%@",error,[error userInfo]);

            abort();

        }

    }

    return _persistentStoreCoordinator;

}

 

-(NSManagedObjectContext *)managedObjectContext

{

    if(_managedObjectContext == nil)

    {

        NSPersistentStoreCoordinator *coordinator = self.persistentStoreCoordinator;

        if(coordinator != nil)

        {

            _managedObjectContext = [[NSManagedObjectContext alloc] init];

            [_managedObjectContext setPersistentStoreCoordinator:coordinator];

        }

    }

    return _managedObjectContext;

}

6.在需要應用Core Data進行資料操控的視圖控制器的.h標頭檔中添加以下代碼:

@property (nonatomic,strong) NSManagedObjectContext *managedObjectContext;

7.在AppDelegate.m檔案中分別#import以上視圖控制器的.h檔案,並將AppDelegate建立的managedObjectContext的指標傳遞給以上控制器

如:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Override point for customization after application launch.

    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;

    CurrentLocationViewController *currentLocationViewController = (CurrentLocationViewController *)tabBarController.viewControllers[0];

    currentLocationViewController.managedObjectContext = self.managedObjectContext;//傳遞指標

    

    UINavigationController *navigationController = (UINavigationController *)tabBarController.viewControllers[1];

    LocationsViewController *locationsViewController = (LocationsViewController *)navigationController.viewControllers[0];

    locationsViewController.managedObjectContext = self.managedObjectContext;//傳遞指標

    

    MapViewController *mapViewController = (MapViewController *)tabBarController.viewControllers[2];

    mapViewController.managedObjectContext = self.managedObjectContext;//傳遞指標

    

    return YES;

}

當以上視圖控制器切換到其他需要應用Core Data操控資料的視圖控制器時,可通過prepareForSegue將managedObjectContext的指標傳遞過去

如:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

{

    if([segue.identifier isEqualToString:@"TagLocation"])

    {

        UINavigationController *navigationController = segue.destinationViewController;

        LocationDetailsViewController *controller = (LocationDetailsViewController *)navigationController.topViewController;

        controller.coordinate = _location.coordinate;

        controller.placemark = _placemark;

        controller.managedObjectContext = self.managedObjectContext;//傳遞指標

    }

}

 

 

(1)添加資料

(2)修改資料

(3)刪除資料

(4)尋找資料:  

  

iOS開發學習之Core Data

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.