iOS开发工作新学知识那些开发的事

iOS开源库介绍-FCModel

2015-04-30  本文已影响1403人  Stark_Dylan

FCModel Git Pages

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

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


Sources

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

FMDB

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

静态字串

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

枚举

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

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

核心类方法的使用步骤:

    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.

上一篇 下一篇

猜你喜欢

热点阅读