初探Realm数据库

偶然间看到接触到realm数据库,于是就增删改查简单的了下手。

如果考虑到后面数据库的数据可能回更新变化,需要在AppDelegate进行一些操作,下面是我仿官方demo写的

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    //迁移版本时
    RLMMigrationBlock migrationBlock = ^(RLMMigration *migration,uint64_t oldSchemaVersion){
        if (oldSchemaVersion < 1) {
            [migration enumerateObjects:Artical.className block:^(RLMObject * _Nullable oldObject, RLMObject * _Nullable newObject) {
                if (oldSchemaVersion < 1) {
                    newObject[@"authorAndarticle"] = [NSString stringWithFormat:@"%@ %@", oldObject[@"author"], oldObject[@"title"]];
                }
            }];
        }
        if (oldSchemaVersion < 3) {
            [migration enumerateObjects:Artical.className block:^(RLMObject * _Nullable oldObject, RLMObject * _Nullable newObject) {
                if (oldSchemaVersion < 1) {
                    newObject[@"authorAndarticle"] = [NSString stringWithFormat:@"%@ %@", oldObject[@"author"], oldObject[@"title"]];
                }
            }];
        }
    };
    RLMRealmConfiguration *configuration = [RLMRealmConfiguration defaultConfiguration];
    
    // set the schema verion and migration block for the defualt realm
    configuration.fileURL = [[[configuration.fileURL URLByDeletingLastPathComponent]URLByAppendingPathComponent:@"persion"]URLByAppendingPathExtension:@"realm"];
 
    configuration.schemaVersion = 2;
    configuration.migrationBlock = migrationBlock;
       [RLMRealmConfiguration setDefaultConfiguration:configuration];
    return YES;
}

数据库初始化,可以自定义也可以使用 默认数据库,关于这点网上又很多介绍,我就不多说了

   //默认数据库
//  RLMRealm *realm = [RLMRealm defaultRealm];

    //自定义数据库
    RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
 
        [RLMRealmConfiguration setDefaultConfiguration:config];
    config.migrationBlock = ^(RLMMigration * _Nonnull migration, uint64_t oldSchemaVersion) {
        
        if (oldSchemaVersion < config.schemaVersion) {
            [migration enumerateObjects:Artical.className block:^(RLMObject * _Nullable oldObject, RLMObject * _Nullable newObject) {
                newObject[@"leading"] = @"";
                
            }];
        }
    };

 

RLMRealm *realm = [RLMRealm realmWithConfiguration:config error:nil];
   

    //所有操作都最好放在begin后面,不然会报错
    [realm beginWriteTransaction];
    
    //为了测试,每次都清空了数据库
      [realm deleteAllObjects];
        for (int i = 0; i< 100; i++) {

            Artical *article = [[Artical alloc]init];
            article.title = [NSString stringWithFormat:@"文章的第%d节",i];
            
            article.num = [NSString stringWithFormat:@"这是主键%d",i];
            article.tag = [NSString stringWithFormat:@"%d",i];
            article.author = [NSString stringWithFormat:@"这是第%d位作者",i];
            article.weight = 1;
            article.leading = @"主人公";
            article.authorAndarticle = [NSString stringWithFormat:@"这是逐渐%d",i];
           [realm addObject:article];
            
        }
    ;
            self.results = [[Artical allObjects]sortedResultsUsingKeyPath:@"tag" ascending:YES];

         [realm commitWriteTransaction];
        dispatch_async(dispatch_get_main_queue(), ^{

            [self.tableView reloadData];
        });

 


    self.realm = realm;

    self.token = [realm addNotificationBlock:^(RLMNotification  _Nonnull notification, RLMRealm * _Nonnull realm) {
        [self.tableView reloadData];
    }];

需要注意的是,设置完主键最好不要更改,不然会报错,如果对主键进行了修改,那么必须卸载应用重新安装,要不会一直闪退,这是我写demo的时候遇到一个坑,

 

我的demo链接https://github.com/kongmingyang/RealmDemo

 

推荐博文:https://www.jianshu.com/p/3260c3d428bf

https://www.cnblogs.com/Erickson/p/Realm-change.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值