• iOS基础


    一、iOS应用数据存取的常用方式

    XML属性列表 —— PList

    NSKeyedArchiver 归档

    Preference(偏好设置)

    SQLite3 

    Core Data

    二、Core Data简介

    Core Data iOS SDK 里的一个很强大的框架,允许程序员以面向对象的方式储存和管理数据。使用Core Data框架,程序员可以很轻松有效地通过面向对象的接口管理数据

    Core Data框架提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite3数据库文件中,也能够将保存在数据库中的数据还原成OC对象

    在数据操作过程中,无需编写任何SQL语句

    要使用Core Data,需要导入CoreData框架

    三、模型文件及实体(Entity

    要使用Code Data,首先需要定义模型文件,描述应用程序中的所有实体(Entities

    所谓实体,是跟数据库进行映射的对象

    四、Core Data主要对象

    NSManagedObjectContext:负责应用和数据库之间的交互(CRUD)

    NSPersistentStoreCoordinator:添加持久化存储库(如SQLite数据库),是物理数据存储的物理文件和程序之间的联系的桥梁,负责管理不同对象上下文

    NSManagedObjectModel:被管理的对象模型

    NSEntityDescription:实体描述

    五、打开数据库

    // 1. 实例化持久化的存储

    // 1.1 Bundle中加载被管理的数据模型

    NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];

    // 1.2 实例化持久化存储调度

    NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];

    // 1.3 添加持久化存储(SQLite)

    [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error];

    // 管理对象上下文

    _context = [[NSManagedObjectContext alloc] init];

    _context.persistentStoreCoordinator = store;

    执行查询之后

    1. Sections属性中记录了分组情况,如果没有指定分组,则是所有对象!

    Sections对象遵守了NSFetchedResultsSectionInfo协议!

    2. 使用objectAtIndexPath可以直接取出查询的结果。

    3. 设置查询结果控制器的代理方法,并且实现

    controllerDidChangeContent:(NSFetchedResultsController *)controller

    代理方法,可以在数据库内容发生变化时,重新刷新表格即可

    所有数据变化,尽在掌控!

    六、查询数据——NSFetchedResultsController

    NSManagedObjectContext *context = [[DataManager sharedDataManager] sharedContext];

    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];

    // 定义查询排序

    NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];

    request.sortDescriptors = @[sort];

    // 定义查询结果控制器

    _fetchedResultController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];

    [_fetchedResultController performFetch:&error];

    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];

    request.predicate = [NSPredicate predicateWithFormat:@"%K LIKE '*52*' OR name CONTAINS ''", @"phoneNo"];

    NSArray *array = [_context executeFetchRequest:request error:nil]; 

  • 相关阅读:
    CF991D Bishwock
    CF1010D Mars rover
    NOIP 2011 计算系数
    SDOI 2008 仪仗队
    浅谈欧拉函数
    CF1249F Maximum Weight Subset
    NOIP 2011 铺地毯
    CF707D Persistent Bookcase
    C++ STL bitset 容器详解
    CF798D Mike and distribution
  • 原文地址:https://www.cnblogs.com/monicaios/p/3543650.html
Copyright © 2020-2023  润新知