通过NSManagerDocument获取NSManagerObjectContext然后操作
NSFetchRequest 存放查询条件的(NSPredicate等)
NSManagerObjectContext对象 通过方法executeFetchRequest: error:来返回查询结果。
如果需要查询全部 的时候 就对NSFetchRequest 不要设置NSPredicate就可以了。
太晚了 有空再写吧。
// // ViewController.m // DemoCoreData // // Created by liu poolo on 13-3-17. // Copyright (c) 2013年 liu poolo. All rights reserved. // #import "ViewController.h" #import "Student.h" #import "Book.h" @interface ViewController () @end @implementation ViewController @synthesize managedObjectContext=m_managedObjectContext; - (IBAction)btGetManagerDocument:(id)sender { NSManagedObjectContext *t=self.managedObjectContext; } int i=0; - (IBAction)btInsertBook:(id)sender { NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *basePath=([paths count]>0)?[paths objectAtIndex:0]:nil; NSURL *url=[NSURL fileURLWithPath:[NSString stringWithFormat:@"%@%@",basePath,@"test.sqlite"]]; NSLog(@"111"); UIManagedDocument *md=[[UIManagedDocument alloc]initWithFileURL:url]; if([[NSFileManager defaultManager] fileExistsAtPath:[url path]]){ [md openWithCompletionHandler:^(BOOL success){ if(success){ NSLog(@"1111"); if(md.documentState==UIDocumentStateNormal){ m_managedObjectContext=md.managedObjectContext; Book *b1=[NSEntityDescription insertNewObjectForEntityForName:@"Book" inManagedObjectContext:m_managedObjectContext]; b1.b_id=[NSNumber numberWithInt:0]; b1.b_name=@"poolo 日记"; Student *s1=[NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:m_managedObjectContext]; b1.b_owner=s1; s1.s_id=[NSNumber numberWithInt:1]; s1.s_name=@"poolo"; } }else{ NSLog(@"counldn't open document at %@",url); } }]; }else{ [md saveToURL:url forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success){ if(success){ if(md.documentState==UIDocumentStateNormal){ m_managedObjectContext=md.managedObjectContext; NSLog(@"2url:%@",url); [md closeWithCompletionHandler:^(BOOL success) { }]; } }else{ NSLog(@"counldn't open document at %@",url); } }]; } } - (IBAction)btQuery:(id)sender { NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *basePath=([paths count]>0)?[paths objectAtIndex:0]:nil; NSURL *url=[NSURL fileURLWithPath:[NSString stringWithFormat:@"%@%@",basePath,@"test.sqlite"]]; NSLog(@"111"); UIManagedDocument *md=[[UIManagedDocument alloc]initWithFileURL:url]; if([[NSFileManager defaultManager] fileExistsAtPath:[url path]]){ [md openWithCompletionHandler:^(BOOL success){ if(success){ NSLog(@"1111"); if(md.documentState==UIDocumentStateNormal){ NSFetchRequest *f=[NSFetchRequest fetchRequestWithEntityName:@"Student"]; NSPredicate *pc=[NSPredicate predicateWithFormat:@"s_name contains %@",@"poolo"]; f.predicate=pc;//如果需要查询全部 的时候 就对NSFetchRequest 不要设置NSPredicate就可以了。 NSError *e; NSArray* students=[md.managedObjectContext executeFetchRequest:f error:&e]; for(Student *st in students){ for(Book *bk in st.s_books){ NSLog(@"stundet id:%@ name:%@ book_id:%@ book_name:%@",st.s_id,st.s_name,bk.b_id,bk.b_name); } } } }else{ NSLog(@"counldn't open document at %@",url); } }]; }else{ [md saveToURL:url forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success){ if(success){ if(md.documentState==UIDocumentStateNormal){ m_managedObjectContext=md.managedObjectContext; NSLog(@"2url:%@",url); [md closeWithCompletionHandler:^(BOOL success) { }]; } }else{ NSLog(@"counldn't open document at %@",url); } }]; } } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end