你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> Coredata的使用方法(簡)

Coredata的使用方法(簡)

編輯:IOS開發綜合

一直以來只知道iOS存儲的四種方法,常用的也是NSUserDefault和Coredata。前者使用自不必說。這裡只對Coredata的簡單用法做個小結。供初學者參考。
本文將通過一個小demo,來展示coredata基本的使用:對數據的存儲,和增刪改查等行為。
首先我們要確定兩個對象的關系
一個family家庭有多個成員member,而一個member只屬於一個家庭。
1.我們首先創建一個項目,勾選Use Core Data選項
這裡寫圖片描述
2.在.xcdatamodel文件中,創建兩個實體,Family和Member這裡寫圖片描述
這裡寫圖片描述
3.建立兩個實體之間的聯系,Type代表兩個實體之間的關系,To Many表示一個family可以對應多個Member對象,而members屬性就是這些Member 對象的集合;
這裡寫圖片描述
這裡還有一個重要的點就是Delete Rule,DeleteRule的四個選項中:
Deny 可以拒絕刪除請求
Nullify 在刪除對象之前重設逆向關系,當刪除對象family之後,他的下屬成員member仍然在數據庫中獨立存在,只是在數據庫中member對應的family為null。
Cascade 刪除對象及它的所有關系(級聯刪除),當刪除一個family對象時,所有與他關聯的member對象也會同時被刪除
No Action 將保證一個關系所指向的對象不受影響,即使這些對象指向了即將被刪除的項
這裡寫圖片描述
4.默認情況下,利用CZ喎?/kf/ware/vc/" target="_blank" class="keylink">vcmUgRGF0Ycihs/a1xMq1zOW2vMrHTlNNYW5hZ2VkT2JqZWN0wODQzbXEo6zE3Lm7wPvTw7z8Lda1ttTAtLTmyKHK/b7doaO1q8rH0ruw48fpv/bPwqOsyrXM5dTatObIocr9vt21xLv5tKHJz6Os09DKsbu50OjSqsztvNPSu9Cp0rXO8be9t6jAtM3qs8nSu9CpxuTL+8jOzvGjrMTHw7S+zbHY0Ou0tL2oTlNNYW5hZ2VkT2JqZWN0tcTX08Dgo6w8YnIgLz4NCjxpbWcgYWx0PQ=="這裡寫圖片描述" src="/uploadfile/Collfiles/20160416/20160416091349228.png" title="\" />
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
5.在數據庫處理中,對象的基本操作增刪改查都是無可爭議的基礎:

+(void)addNewFamilyWithName:(NSString *)name address:(NSString *)address success:(void (^)())success failure:(void(^)(NSError *error))failure{
    AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
    NSManagedObjectContext *context = appDelegate.managedObjectContext;

    NSManagedObject *family = [NSEntityDescription insertNewObjectForEntityForName:@"Family" inManagedObjectContext:context];
    [family setValue:name forKey:@"name"];
    [family setValue:address forKey:@"address"];

    NSError *error = nil;
    BOOL isSuccess = [context save:&error];
    if (!isSuccess) {
        if (failure) {
            failure(error);
        }
    }else{
        if (success) {
            success();
        }
    }
}
+(void)deleteFamily:(Family *)family success:(void (^)())success failure:(void(^)(NSError *error))failure{
    AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
    NSManagedObjectContext *context = appDelegate.managedObjectContext;

    [context deleteObject:family];

    NSError *error = nil;
    BOOL isSuccess = [context save:&error];
    if (!isSuccess) {
        if (failure) {
            failure(error);
        }
    }else{
        if (success) {
            success();
        }
    }
}
+(NSArray *)fetchFamilyLists{
    AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
    NSManagedObjectContext *context = appDelegate.managedObjectContext;

    // 初始化一個查詢請求
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    // 設置要查詢的實體
    request.entity = [NSEntityDescription entityForName:@"Family" inManagedObjectContext:context];
    // 設置排序(按照age降序)
    //    NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO];
    //    request.sortDescriptors = [NSArray arrayWithObject:sort];
    // 設置條件過濾(搜索name中包含字符串"M"的記錄,注意:設置條件過濾時,數據庫SQL語句中的%要用*來代替,所以%M%應該寫成*M*,更多過濾方法,可以看下一篇轉載文章)
    //    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name like %@", @"*M*"];
    //    request.predicate = predicate;
    // 執行請求
    NSError *error = nil;
    NSArray *objs = [context executeFetchRequest:request error:&error];
    if (error) {
        [NSException raise:@"查詢錯誤" format:@"%@", [error localizedDescription]];
    }
    // 遍歷數據
    for (NSManagedObject *obj in objs) {
        NSLog(@"name=%@", [obj valueForKey:@"name"]);
    }
    return objs;
}


 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved