通过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
本文介绍如何通过UIManagedDocument实现对Core Data的管理,包括打开文档、插入记录、查询数据的操作。
348

被折叠的 条评论
为什么被折叠?



