表结构:NSEntityDescription
表记录:NSManagedObject
数据库存放方式:NSPersistentStoreCoordinator(持久化存储协调者)
数据库操作:NSManagedObjectContext(被管理的对象上下文)
NSFetchRequest对象(相当于SQL语句)
NSEntityDescription 创建查询实体(相当于设置查询哪个表)
NSSortDescriptor 创建排序描述符,(ascending:是否升序)
delegate.h
@property (readonly,strong, nonatomic)NSManagedObjectContext *managedObjectContext;
@property (readonly,strong, nonatomic)NSManagedObjectModel *managedObjectModel;
@property (readonly,strong, nonatomic)NSPersistentStoreCoordinator *persistentStoreCoordinator;
- (void)saveContext;
- (NSURL *)applicationDocumentsDirectory;
delegate.m
@synthesize managedObjectContext =_managedObjectContext;
@synthesize managedObjectModel =_managedObjectModel;
@synthesize persistentStoreCoordinator =_persistentStoreCoordinator;
- (void)saveContext
{
NSError *error = nil;
NSManagedObjectContext *managedObjectContext =self.managedObjectContext;
if (managedObjectContext != nil)
{
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error])
{
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
NSLog(@"Unresolved error %@, %@", error, [erroruserInfo]);
abort();
}
else
NSLog( @"数据成功插入");
}
}
- (NSManagedObjectContext *)managedObjectContext
{
if (_managedObjectContext !=nil) {
return_managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [selfpersistentStoreCoordinator];
if (coordinator != nil) {
_managedObjectContext = [[NSManagedObjectContextalloc] init];
[_managedObjectContextsetPersistentStoreCoordinator:coordinator];
}
return_managedObjectContext;
}
- (NSManagedObjectModel *)managedObjectModel
{
if (_managedObjectModel !=nil) {
return_managedObjectModel;
}
NSURL *modelURL = [[NSBundlemainBundle] URLForResource:@"test"withExtension:@"momd"];
_managedObjectModel = [[NSManagedObjectModelalloc] initWithContentsOfURL:modelURL];
return_managedObjectModel;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator !=nil) {
return_persistentStoreCoordinator;
}
//链接数据库,备数据存储
NSURL *storeURL = [[selfapplicationDocumentsDirectory] URLByAppendingPathComponent:@"test.sqlite"];
NSLog(@"%@",storeURL);
NSError *error = nil;
//持久化存储调度器由托管对象模型初始化
_persistentStoreCoordinator = [[NSPersistentStoreCoordinatoralloc] initWithManagedObjectModel:[selfmanagedObjectModel]];
//设置数据存储方式为SQLITE
if (![_persistentStoreCoordinatoraddPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nilURL:storeURLoptions:nilerror:&error]) {
NSLog(@"Unresolved error %@, %@", error, [erroruserInfo]);
abort();
}
return_persistentStoreCoordinator;
}
- (NSURL *)applicationDocumentsDirectory
{
NSURL *url=[[[NSFileManagerdefaultManager]URLsForDirectory:NSDocumentDirectoryinDomains:NSUserDomainMask]lastObject];
//NSLog(@"%@",url);
//NSFileManager *file=[NSFileManager defaultManager];
//NSLog(@"%@",file);
NSLog(@"%@",[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)objectAtIndex:0]);
return url;
}
testView.h
@interface testview :UIViewController
{
IBOutlet UITextField *citytext;
IBOutlet UITextField *provincetext;
XYZAppDelegate *mydelegate;
}
@property(nonatomic,strong)UITextField *citytext;
@property(nonatomic,strong)UITextField *provincetext;
@property(nonatomic,strong)XYZAppDelegate *mydelegate;
-(IBAction)save:(UIButton *)sender;
-(IBAction)read:(UIButton *)sender;
testView.m
- (void)viewDidLoad
{
[superviewDidLoad];
self.mydelegate=(XYZAppDelegate *)[[UIApplicationsharedApplication]delegate];
}
-(IBAction)save:(UIButton *)sender
{
NSManagedObject *object=[NSEntityDescriptioninsertNewObjectForEntityForName:@"Province"inManagedObjectContext:self.mydelegate.managedObjectContext];
[objectsetValue:citytext.textforKey:@"cityname"];
[objectsetValue:provincetext.textforKey:@"provincename"];
[self.mydelegatesaveContext];
}
-(IBAction)read:(id)sender
{
NSFetchRequest *fetch=[[NSFetchRequestalloc]init];//相当于sql语句
NSEntityDescription *object=[NSEntityDescriptionentityForName:@"Province"inManagedObjectContext:self.mydelegate.managedObjectContext];//相当于查询的表
[fetchsetEntity: object ];
NSSortDescriptor *sort=[[NSSortDescriptoralloc]initWithKey:@"provincename"ascending:NO];//创建排序描述符scending 是否升序
NSLog(@"sort:%@",sort);
NSArray *sortarr=[[NSArrayalloc]initWithObjects:sort,nil];
[fetchsetSortDescriptors:sortarr];
NSError *error;
NSArray *fetchresult=[self.mydelegate.managedObjectContextexecuteFetchRequest:fetch error:&error];//获取执行请求结果
for (NSManagedObject *objectin fetchresult) {
// citytext.text=[object valueForKey:@"cityname"];
// provincetext.text=[object valueForKey:@"provincename"];
//NSLog(@"city:%@,province:%@ \n",[object valueForKey:@"cityname"],[object valueForKey:@"provincename"]);
//NSLog(@"%@",objectid);
}
// NSPredicate *pre=[NSPredicate predicateWithFormat:@"%@="];
// NSLog(@"%@",fetchresult);
NSLog(@"fetchresult is :%@",fetchresult);
}