core data的使用

//@synthesize name = _name;//當同時寫了getter和setter方法之後,這個就失效了
//屬性中,如果是給屬性賦值,是一定要用self.,如果是調用屬性,不要用self.,這樣效率會高一些(注:只有是lazyload的使用,才使用self.)
/**
 *  Entity:實體,其實就是sqlite表
 Attribute:屬性,就是sqlite中的字段
 Relationship:關係,就是sqlite中的表與表之間的關係
 Fetch Properties:查詢屬性,就是SQL語句
 
 .sqlite 數據庫
 .sqlite-shm:數據庫日誌
 .sqlite-wal:數據庫索引共享內存文件
 */


//@dynamic 動態的,與synthesize區別:dynamic是在運行(Runtime)時創建getter和setter方法,synthesize是在編譯的時候創建getter和setter方法<pre name="code" class="objc">

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //打印沙河總目錄
    NSLog(@"%@", NSHomeDirectory());
    
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    <span style="background-color: rgb(102, 102, 204);">//調用方法</span>
    //添加
    [self addCat];
    //查詢所有
    [self allCats];
    //查詢一個
    [self oneCat];
    
    return YES;
}
//coredata數據持久化的增刪改查
<span style="background-color: rgb(102, 102, 204);">//增</span>
- (void)addCat
{
    //找到實體Cat,(找表)
    NSEntityDescription *catED = [NSEntityDescription entityForName:@"Cat" inManagedObjectContext:self.managedObjectContext];
    Cat *cat = [[Cat alloc] initWithEntity:catED insertIntoManagedObjectContext:self.managedObjectContext];
    cat.name = @"miaomiao";
    cat.age = @4;
    cat.breed = @"天貓";
    //加到臨時數據庫,如果沒有錯誤,再添加到真實數據庫
    
    //淺拷貝和深拷貝
    Cat *acat = [Cat copy];//淺拷貝,只拷貝地址(指針)
    acat = [cat mutableCopy];//深拷貝,拷貝指針和指針指向的內容
    
    
    
    NSError *error = nil;
    BOOL result = [self.managedObjectContext save:&error];
    if (result) {
        NSLog(@"添加成功");//若無錯誤,自動添加到真實數據庫
    } else {
        NSLog(@"%@", error);
    }
}
<span style="background-color: rgb(102, 102, 204);">
//查詢所有的Cat</span>
- (void)allCats
{
    //相當於sqlite語句
    NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Cat"];
    
    NSError *error = nil;
    
    //查詢並獲取結果
    NSArray *catArr = [self.managedObjectContext executeFetchRequest:request error:&error];
    
    if (error) {
        NSLog(@"%@", error);
    } else {
        NSLog(@"查詢成功");
        for (Cat *cat in catArr) {
            NSLog(@"%@", cat);
        }
    }
}
<span style="background-color: rgb(153, 153, 255);">
//查詢一個</span>
- (void)oneCat
{
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Cat"];
    
    //添加一些條件(謂詞)
    //單引號
    request.predicate = [NSPredicate predicateWithFormat:@"name = 'mimi'"];
    //request.predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
        
    //}];
    NSError *error = nil;
    NSArray *catArr = [self.managedObjectContext executeFetchRequest:request error:&error];
    if (error) {
        NSLog(@"%@", error);
    } else {
        NSLog(@"條件查詢成功");
        for (Cat *cat in catArr) {
            
            NSLog(@"%@", cat);
            
            //先便利查詢到,再修改
            [self update:cat];
            NSLog(@"%@", cat);
            
            //刪除
            [self deleteCat:cat];
            NSLog(@"/////////%@", catArr);
        }
    }
}

<span style="background-color: rgb(102, 102, 204);">//修改</span>
- (void)update:(Cat *)cat
{
    cat.age = @10;
    NSError *error = nil;
    BOOL result = [self.managedObjectContext save:&error];
    if (result) {
        NSLog(@"修改成功");
    } else {
        NSLog(@"%@", error);
    }
}

<span style="background-color: rgb(204, 102, 204);">//刪除</span>
- (void)deleteCat:(Cat *)cat
{
    [self.managedObjectContext deleteObject:cat];
    
    //保存
    NSError *error = nil;
    BOOL result = [self.managedObjectContext save:&error];
    if (result) {
        NSLog(@"刪除成功");
    } else {
        NSLog(@"%@", error);
    }
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章