[ios]coreData 的一些操作

通过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

 

猜你喜欢

转载自poolo.iteye.com/blog/1830963