博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于CoreData的使用
阅读量:5117 次
发布时间:2019-06-13

本文共 2081 字,大约阅读时间需要 6 分钟。

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

7.1.3.           基本实现

       1、指定存储数据文件

 OBJC
 
1234
*paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); *documentsDirectory = [paths lastObject];  *persistentStorePath = [[documentsDirectory stringByAppendingPathComponent:@"TopSongs.sqlite"] retain];

       2、创建托管对象模型

 OBJC
 
1
 *managedObjectModel = [[ mergedModelFromBundles:nil] retain];

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

 OBJC
 
1234
*storeUrl = [ fileURLWithPath:self.persistentStorePath]; *persistentStoreCoordinator = [[ alloc] initWithManagedObjectModel:self.managedObjectModel]; *error = nil; *persistentStore = [persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error];

       4、创建托管对象上下文

 OBJC
 
12
  *managedObjectContext = [[ alloc] init];[managedObjectContext setPersistentStoreCoordinator: self.persistentStoreCoordinator];

       5、创建实体描述对象

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

       6、创建托管对象

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

       7、保存

 OBJC
 
12
  *saveError = nil;[self.managedObjectContext save:&saveError]

       8、创建获取数据请求

 OBJC
 
12345
  *fetchRequest = [[ alloc] init];// 数据排序,Sort key为NSManagedObject托管对象的一个属性 *sortDescriptor = [[ alloc] initWithKey:@"" ascending:YES]; *sortDescriptors = [[ alloc] initWithObjects:sortDescriptor, nil];[fetchRequest setSortDescriptors:sortDescriptors];

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

 OBJC
 
12345678
 NSFetchedResultsController *fetchedResultsController = [[NSFetchedResultsController alloc]        initWithFetchRequest:self.fetchRequest        managedObjectContext:self.managedObjectContext        sectionNameKeyPath:nil        cacheName:@""];  *error;BOOL success = [self.fetchedResultsController performFetch:&error];

转载于:https://www.cnblogs.com/lixiong-iOS/p/3907665.html

你可能感兴趣的文章
23种经典设计模式UML类图汇总
查看>>
discuz! 设置私密论坛版块的方法
查看>>
91. Decode Ways
查看>>
判断一组序列数据是否是堆
查看>>
数论,数学
查看>>
iOS开发UI篇—控制器的View的创建
查看>>
Asp.net 2.0 自定义伪静态源码
查看>>
hdu 5366 The mook jong
查看>>
如果你只会JQuery的插件式开发, 那么你可以进来看看?
查看>>
svn解决代码冲突
查看>>
Java异常(输出[D@139a55问题)
查看>>
鸟哥Linux私房菜笔记(二):正则表达式、shell脚本
查看>>
(linux自学笔记)进程与线程
查看>>
maven打包二进制文件
查看>>
企业做数据缓存是使用Memcached还是选Redis?
查看>>
服务器配置不安全
查看>>
PreparedStatement 与 Statement 的区别
查看>>
象棋人机对弈程序的思想
查看>>
实验一
查看>>
Hamburger Magi 状压dp
查看>>