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