1. 程式人生 > >數據持久化(六)之Using CoreData with MagicalRecord

數據持久化(六)之Using CoreData with MagicalRecord

string ogg ram 默認 override term loading min save

第五節裏面,我介紹了CoreData的配置和主要的增刪改查,可能非常多人會認為用它真繁瑣.這裏,我再介紹網上大神對它進行了人性化封裝的第三方MagicalRecord,正如FMDB對sqlite進行了封裝一樣,MagicalRecord讓你認為用CoreData非常方便.

@基本配置:

1.下載MagicalRecord,將裏面的MagicalRecord目錄拖入你的project

2.確定你創建的project沒有勾選"Use Core Data"

3.導入CoreData.frame框架

4.在.pch文件裏引入頭文件"CoreData+MagicalRecord.h"(僅僅能,必須在這裏引用)


@詳細操作:

1.初始化(在didFinishLaunchingWithOptions中)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    
    HMTRootViewController *rootVC = [[HMTRootViewController alloc] init];
    self.window.rootViewController = rootVC;
    
    //  初始化
    [MagicalRecord setupCoreDataStackWithStoreNamed:@"MT.sqlite"];
    
    [self.window makeKeyAndVisible];
    return YES;
}

- (void)applicationWillTerminate:(UIApplication *)application
{
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    [MagicalRecord cleanUp];
}
2.創建一個Model做測試,創建一個Person的Entity

技術分享

3.增刪改查詳細操作

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    //  初始化一個Person對象
    /**
     *  這裏要註意:默認,xcdatamodeld實體描寫敘述表名(name)和類名(class)必須保持一致
     *  假設name和class不一致,實現MagicalRecord_MOGenerator協議中得entityName方法來改變
     @implementation NSManagedObject (MagicalRecord)
     
     + (NSString *) MR_entityName;
     {
     NSString *entityName;
     
     if ([self respondsToSelector:@selector(entityName)])
     {
     entityName = [self performSelector:@selector(entityName)];
     }
     
     if ([entityName length] == 0) {
     entityName = NSStringFromClass(self);
     }
     
     return entityName;
     }
     */
    Person *person = [Person MR_createEntity];
    person.name = @"HMT";
    person.sex = @"男";
    person.age = @25;
    
}

//  加入操作
- (void)addDataOperation{

    // 文檔解釋:For any entities to actually be saved / updated / deleted on disk call following method(添加,更新,刪除 都要用這種方法來保存數據)
    [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];;
}

//  查詢操作
- (void)selectDataOperation{

    //  find數據庫中全部的人
    NSArray *peoples = [Person MR_findAll];
    //  find數據庫中第一條記錄
    Person *firPerson = [Person MR_findFirst];
    //  find數據庫中全部name屬性為"HMT"的人並依照年齡age排序
    NSArray *otherPeoples = [Person MR_findByAttribute:@"name" withValue:@"HMT" andOrderBy:@"age" ascending:YES];

}

//  更新操作
- (void)upDataOperation{

    //  選定要改動的人
    NSArray *persons = [Person MR_findByAttribute:@"name" withValue:@"HMT"];
    for (Person *person in persons) {
        person.name = @"WDQ";
    }
    [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];
    
}

//  刪除操作
- (void)deleteDataOperation{

    //  delete數據庫中全部人
    [Person MR_truncateAll];
    [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];
    
    //  依據條件delete特定的某個人
    NSArray *persons = [Person MR_findByAttribute:@"name" withValue:@"HMT"];
    for (Person *person in persons) {
        [person MR_deleteEntity];
    }
    [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];

}
4.額外配置(取消前綴名和不打印日誌信息)

//If you want to omit the "MR_" prefix to all MagicalRecord realted method calls define following before importing the MagicalRecord header
#define MR_SHORTHAND

//Turn off MagicalRecord logging, again by defining following before header import
#define MR_ENABLE_ACTIVE_RECORD_LOGGING 0


@以上僅僅是一些基本操作,其它能夠自己去查看頭文件


數據持久化(六)之Using CoreData with MagicalRecord