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