iOS开源库介绍-FCModel

作者: Stark_Dylan | 来源:发表于2015-04-30 12:59 被阅读1403次

FCModel Git Pages

直观的说, 这东西就是NSObject的一个扩展,让你方便的在数据库中操作自己的对象,基于FMDB 来做的。今天就来剖析一下这东西的远离。

首先,拿到FCModel的Sources文件,只有6个文件,


Sources

FCModel是核心的类,在.h文件中引入了FMDB,并做了安全处理

FMDB

接着,就是一些静态的字串,为了方便通知的使用

静态字串

然后是一个枚举, 用来标记保存的状态

枚举

接下来就是这个开源库的核心地方:

  • 属性
属性
  • 属性1: 相当于这个对象在数据库中的primaryKey

  • 属性2: 所有的字段名字典

  • 属性3: 是否有未保存的变化

  • 属性4: 是否存在于数据库中

  • 属性5: 删了么

  • 属性6: 最后的数据库操作过程中的错误

  • 一些类方法(这里介绍, 我们直说核心方法)

打开数据库 执行数据库语句 屏幕快照 2015-04-30 下午12.42.42.png

核心类方法的使用步骤:

  • 首先 [FCModel closeDatabase]; 为了测试一下是否我们之前被打开过、会返回一个bool值,并且会预防一些崩溃的情况。

  • 然后,找到数据库的地址

    NSString *dbPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"testDB.sqlite3"];
    NSLog(@"DB path: %@", dbPath);

在我们需要创建新的数据库之前先删除调之前的数据库
[NSFileManager.defaultManager removeItemAtPath:dbPath error:NULL];

  • 打开数据库- 使用类方法
// 打开数据库
    [FCModel openDatabaseAtPath:dbPath withSchemaBuilder:^(FMDatabase *db, int *schemaVersion) {
        
        // 基本的一些错误 Log的设置
        [db setCrashOnErrors:YES];
        db.traceExecution = YES;
        [db beginTransaction];
        
        // 下边对db进行操作 并且进行提交
        void (^failedAt)(int statement) = ^(int statement){
            int lastErrorCode = db.lastErrorCode;
            NSString *lastErrorMessage = db.lastErrorMessage;
            [db rollback];
            NSAssert3(0, @"Migration statement %d failed, code %d: %@", statement, lastErrorCode, lastErrorMessage);
        };
        
        // schemaVersion 判断状态
        if (*schemaVersion < 1) {
            // 创建表
            if (! [db executeUpdate:
                @"CREATE TABLE Person ("
                @"    id           INTEGER PRIMARY KEY AUTOINCREMENT," // Autoincrement is optional. Just demonstrating that it works.
                @"    name         TEXT NOT NULL DEFAULT '',"
                @"    colorName    TEXT NOT NULL,"
                @"    taps         INTEGER NOT NULL DEFAULT 0,"
                @"    createdTime  INTEGER NOT NULL,"
                @"    modifiedTime INTEGER NOT NULL"
                @");"
            ]) failedAt(1);
            if (! [db executeUpdate:@"CREATE UNIQUE INDEX IF NOT EXISTS name ON Person (name);"]) failedAt(2);

            if (! [db executeUpdate:
                @"CREATE TABLE Color ("
                @"    name         TEXT NOT NULL PRIMARY KEY,"
                @"    hex          TEXT NOT NULL"
                @");"
            ]) failedAt(3);

            // 创建表
            
            *schemaVersion = 1;
        }

        // 提交
        [db commit];
    }];

然后 操作一下数据库中的数据

Color *c = [Color instanceWithPrimaryKey:@"colorName"];
        c.hex = hex;
        [c save];

你得model一定要继承FCModel, 然后直接可以方便的使用对象方法来进行操作。

只需要通过primaryKey拿到当前的对象,然后操作对象的属性之后进行保存即可。

FCModel是一个全局的数据库对象,你可以全局的管理这些对象,也可以通过primaryKey拿到某一个对象进行操作

也可以直接通过类方法进行操作

操作方法

而且你可以获得某个对象当前的状态

状态

对象直接操作很简单

使用发那个发

推荐大家去看一下。

CopyRight@WildDylan 2015-4-30.

相关文章

网友评论

  • 小凡凡520:我的一个同事 写法和你一致 把db作为block的一个参数 只不过是swift的

本文标题:iOS开源库介绍-FCModel

本文链接:https://www.haomeiwen.com/subject/woxbfttx.html