[ios]coreData 的一些操作

本文介绍如何通过UIManagedDocument实现对Core Data的管理,包括打开文档、插入记录、查询数据的操作。

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值