zoukankan      html  css  js  c++  java
  • 关于CoreData的使用

    托管对象必须是NSManagedObject或者NSManagedObject子类的任一实例。NSManagedObject能够表述任何实体。它使用一个私有的内部存储,以维护其属性,并实现托管对象所需的所有基本行为。托管对象有一个指向实体描述的引用。实体描述表述了实体的元数据,包括实体的名称,实体的属性和实体之间的关系。可以创建NSManagedObject子类来实现实体的其他行为。

    7.1.3.           基本实现

           1、指定存储数据文件

    ?View Code OBJC
     
    1
    2
    3
    4
    
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths lastObject];
     
    NSString *persistentStorePath = [[documentsDirectory stringByAppendingPathComponent:@"TopSongs.sqlite"] retain];

           2、创建托管对象模型

    ?View Code OBJC
     
    1
    
    NSManagedObjectModel  *managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];

           3、创建持久化存储协调器,并使用SQLite数据库做持久化存储

    ?View Code OBJC
     
    1
    2
    3
    4
    
    NSURL *storeUrl = [NSURL fileURLWithPath:self.persistentStorePath];
    NSPersistentStoreCoordinator *persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel];
    NSError *error = nil;
    NSPersistentStore *persistentStore = [persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error];

           4、创建托管对象上下文

    ?View Code OBJC
     
    1
    2
    
     NSManagedObjectContext *managedObjectContext = [[NSManagedObjectContext alloc] init];
    [managedObjectContext setPersistentStoreCoordinator: self.persistentStoreCoordinator];

           5、创建实体描述对象

    ?View Code OBJC
     
    1
    
     NSEntityDescription *entityDescription = [[NSEntityDescription entityForName:@"Song" inManagedObjectContext: self.managedObjectContext] retain];

           6、创建托管对象

    ?View Code OBJC
     
    1
    
     NSManagedObject *managedObject = [[NSManagedObject alloc] initWithEntity:self.entityDescription insertIntoManagedObjectContext:self.managedObjectContext];

           7、保存

    ?View Code OBJC
     
    1
    2
    
     NSError *saveError = nil;
    [self.managedObjectContext save:&saveError]

           8、创建获取数据请求

    ?View Code OBJC
     
    1
    2
    3
    4
    5
    
     NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    // 数据排序,Sort key为NSManagedObject托管对象的一个属性
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"" ascending:YES];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    [fetchRequest setSortDescriptors:sortDescriptors];

           9、获取持久化存储中的数据,并对数据进行缓存

    ?View Code OBJC
     
    1
    2
    3
    4
    5
    6
    7
    8
    
     NSFetchedResultsController *fetchedResultsController = [[NSFetchedResultsController alloc]
            initWithFetchRequest:self.fetchRequest
            managedObjectContext:self.managedObjectContext
            sectionNameKeyPath:nil
            cacheName:@""];
     
    NSError *error;
    BOOL success = [self.fetchedResultsController performFetch:&error];
  • 相关阅读:
    基于Flask开发web微信
    爬取实例
    scrapy框架学习之路
    scripy
    wtforms
    由testcase数据之分析
    无用之flask学习
    无用之flask
    无用之学matplotlib,numpy,pandas
    jsp_1
  • 原文地址:https://www.cnblogs.com/lixiong-iOS/p/3907665.html
Copyright © 2011-2022 走看看