标签:
CoreData提供了一种简便的对象持久化管理方法,使你可以不用关心数据的存储,只需要关心对象的增加、删除、更改、读写。
基本概念
托管对象(managed object)
一个托管对象代表你想要保存到数据存储中的一个对象。这在概念上类似于SQL中的一条记录, 并且通常也包含一些域,这些域对应于你想要保存的对象的属性。
数据存储(data store)
Core Data支持4中类型的数据存储:SQLiteStore, XMLStore, BinaryStore, InMemoryStore。
使用CoreData
2 有了托管对象模型实例之后,我们就可以创建一个持久化协调器实例了。持久化协调器处理到数据存储的连接。大概是处理怎么把对象写到数据存储或怎么从数据存储读对象吧。
3 有了持久化协调器实例之后,我们需要提供一个数据存储给它管理。你可以通过发送addPersistentStoreWithType:configuration:URL:options:error:消息来实现。
4 最后一步就是实例化托管对象上下文。有了托管对象上下文,你就可以方便的管理对象了。
下面是使用的实例代码:
1 初始化
-(void) viewDidLoad中
//创建管理对象模型 objectModel = [NSManagedObjectModel mergedModelFromBundles:nil]; // 创建持久化数据存储协调器 coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:objectModel]; // 添加数据存储 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); // 创建一个SQLite数据库作为数据存储 NSString *documentsDir = [paths objectAtIndex:0]; NSString *filePath = [documentsDir stringByAppendingPathComponent:@"datastore.sqlite"]; NSURL *databaseURL = [NSURL fileURLWithPath:filePath]; NSError *error = nil; [coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:databaseURL options:nil error:&error]; // 创建托管对象上下文 objectContext = [[NSManagedObjectContext alloc] init]; [objectContext setPersistentStoreCoordinator:coordinator];
2 添加对象
NSString* newName = nameField.text; NSString* newPhone = phoneField.text; NSString* newPostcode = postcodeField.text; ContactData *newContact = (ContactData *)[NSEntityDescription insertNewObjectForEntityForName:@"ContactData" inManagedObjectContext:objectContext]; newContact.customerName = newName; newContact.phoneNumber = newPhone; newContact.postCode = newPostcode; NSError* error; if ([objectContext save:&error]) { [self fetchExistingContactData]; [tableofcontacts reloadData]; }
3 访问对象
NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription* entityDescription = [NSEntityDescription entityForName:@"ContactData" inManagedObjectContext:objectContext]; [fetchRequest setEntity:entityDescription]; NSError* error; existingContacts = [objectContext executeFetchRequest:fetchRequest error:&error];
///////////////////*****************************//////////////////////
#import "ViewController.h"
#import <CoreData/CoreData.h>
#import "User.h"
#import "WuGong.h"
@interface ViewController (){
IBOutlet UITextField *_nameField;
IBOutlet UITextField *_scoreField;
NSManagedObjectContext *_context;//coreData管理上下文
}
- (IBAction)addUser:(id)sender;
- (IBAction)fetch:(id)sender;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//模型 user
NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];
//协调者(设置模型,路径)
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
//数据库路径
NSString *path = [NSString stringWithFormat:@"%@/Documents/data2.db",NSHomeDirectory()];
[coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:path] options:nil error:nil];
//上下文
_context = [[NSManagedObjectContext alloc] init];
//给上下文设置协调者
_context.persistentStoreCoordinator = coordinator;
}
- (void)addUser:(id)sender{
//创建一个User对象
User *user = [NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:_context];
user.name = _nameField.text;
user.score = [NSNumber numberWithInt:[_scoreField.text intValue]];
//武功
user.wugong = [NSEntityDescription insertNewObjectForEntityForName:@"WuGong" inManagedObjectContext:_context];
user.wugong.name = @"降龙十八掌";
//保存
if ([_context save:nil]) {
NSLog(@"保存成功");
}else{
NSLog(@"保存失败");
}
}
- (void)fetch:(id)sender{
//查询
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"User"];
//排序
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"score" ascending:YES];
[request setSortDescriptors:@[sort]];
NSArray *array = [_context executeFetchRequest:request error:nil];
for (User *user in array) {
NSLog(@"%@:%@:%@",user.name,user.score,user.wugong.name);
//修改
if ([user.score intValue] == 60) {
user.score = @70;
if ([_context save:nil]) {
NSLog(@"修改成功");
}
}
//删除
if ([user.score intValue] == 0) {
[_context deleteObject:user];
if ([_context save:nil]) {
NSLog(@"删除成功");
}
}
}
}
标签:
原文地址:http://www.cnblogs.com/wxw511518/p/4433379.html