托管对象必须是NSManagedObject或者NSManagedObject子类的任一实例。NSManagedObject能够表述任何实体。它使用一个私有的内部存储,以维护其属性,并实现托管对象所需的所有基本行为。托管对象有一个指向实体描述的引用。实体描述表述了实体的元数据,包括实体的名称,实体的属性和实体之间的关系。可以创建NSManagedObject子类来实现实体的其他行为。
7.1.3. 基本实现
1、指定存储数据文件
1
2
3
4
| NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths lastObject];
NSString *persistentStorePath = [[documentsDirectory stringByAppendingPathComponent:@"TopSongs.sqlite"] retain]; |
2、创建托管对象模型
3、创建持久化存储协调器,并使用SQLite数据库做持久化存储
4、创建托管对象上下文
5、创建实体描述对象
6、创建托管对象
1
| NSManagedObject *managedObject = [[NSManagedObject alloc] initWithEntity:self.entityDescription insertIntoManagedObjectContext:self.managedObjectContext]; |
7、保存
1
2
| NSError *saveError = nil;
[self.managedObjectContext save:&saveError] |
8、创建获取数据请求
9、获取持久化存储中的数据,并对数据进行缓存
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]; |