基于iOS Realm数据库的使用实例详解
程序员文章站
2023-12-16 15:13:46
首先下载realm源代码,
将下载的文件解压,从 ios/static/ 目录中将 realm.framework 拖曳到 xcode 工程的文件导航器内,然后在 xco...
首先下载realm源代码,
将下载的文件解压,从 ios/static/ 目录中将 realm.framework 拖曳到 xcode 工程的文件导航器内,然后在 xcode 文件导航器中选中工程。然后选择应用目标,前往 build phases 选项卡。在 link binary with libraries 部分中单击 + 按钮,然后添加 libc++.tbd 和 libz.tbd。这样还没有完,我们还需要安装插件,打开解压文件夹下的plugin,运行realmplugin.xcodeproj,然后重启xcode。
这样环境配置就完了,现在说重点如何去使用。
1.创建实体类
new file翻到最下面点击创建realm实体类
#import <realm/realm.h> @interface testbean : rlmobject @property nsstring* name; @property nsinteger age; @end // this protocol enables typed collections. i.e.: // rlmarray<testbean *><testbean> rlm_array_type(testbean) #import "testbean.h" @implementation testbean @end
2.增删改查
这个增加,可以看到直接添加实体类就行了,这个rlmrealm就是数据库的操作类,以后所有操作都靠他。
-(void)addaction{ nslog(@"add"); self.name = _tf_name.text; self.age = [_tf_age.text integervalue]; testbean* bean = [[testbean alloc]init]; bean.name = self.name; bean.age = self.age; rlmrealm *realm = [rlmrealm defaultrealm]; [realm transactionwithblock:^{ [realm addobject:bean]; }]; }
删除也是通过删除实体类来实现,但是我们需要首先通过查询出实体类才行。这个查询我们可以看到通过我们创建的实体类就能实现
-(void)deleteaction{ nslog(@"delete"); rlmresults *dogs = [testbean allobjects]; rlmrealm *realm = [rlmrealm defaultrealm]; [realm transactionwithblock:^{ for (testbean *bean in dogs) { [realm deleteobject:bean]; } }]; }
更新也是通过改变实体类的数据来实现
-(void)updateaction{ nslog(@"update"); rlmresults *dogs = [testbean allobjects]; [[rlmrealm defaultrealm] transactionwithblock:^{ for (testbean *bean in dogs) { bean.name = @"李四"; } }]; }
查询我们还可以添加条件
// 使用断言字符串来查询 rlmresults<dog *> *tandogs = [dog objectswhere:@"color = 'tan' and name beginswith 'b'"]; // 使用 nspredicate 来查询 nspredicate *pred = [nspredicate predicatewithformat:@"color = %@ and name beginswith %@", @"tan", @"b"]; tandogs = [dog objectswithpredicate:pred];
3.排序
这个是在查询完后去实现,通过实体类的key来排序。
-(void)sortaction{ nslog(@"query"); rlmresults *dogs = [[testbean allobjects] sortedresultsusingkeypath:@"name" ascending:yes]; [[rlmrealm defaultrealm] transactionwithblock:^{ for (testbean *bean in dogs) { nslog(@"%@",bean.name); } }]; }
4.小结
只说了常用的功能,贴上官方中文文档供大家参考
5.例子代码
// // viewcontroller.m // bmobtest // // created by shanreal-ios on 2017/12/9. // copyright © 2017年 shanreal.longzhenhao. all rights reserved. // #import "viewcontroller.h" #import "testbean.h" @interface viewcontroller () @property(nonatomic,strong)uibutton* add; @property(nonatomic,strong)uibutton* delete; @property(nonatomic,strong)uibutton* update; @property(nonatomic,strong)uibutton* query; @property(nonatomic,strong)uibutton* sort; @property(nonatomic,strong)nsstring* name; @property(nonatomic,assign)nsinteger* age; @property(nonatomic,strong)uitextfield* tf_name; @property(nonatomic,strong)uitextfield* tf_age; @end @implementation viewcontroller - (void)viewdidload { [super viewdidload]; // do any additional setup after loading the view, typically from a nib. _add = [[uibutton alloc]initwithframe:cgrectmake(10, 30, 100, 20)]; [_add settitle:@"add" forstate:uicontrolstatenormal]; [_add settitlecolor:[uicolor blackcolor] forstate:uicontrolstatenormal]; [_add addtarget:self action:@selector(addaction) forcontrolevents:uicontroleventtouchupinside]; _delete = [[uibutton alloc]initwithframe:cgrectmake(10, 60, 100, 20)]; [_delete settitle:@"delete" forstate:uicontrolstatenormal]; [_delete settitlecolor:[uicolor blackcolor] forstate:uicontrolstatenormal]; [_delete addtarget:self action:@selector(deleteaction) forcontrolevents:uicontroleventtouchupinside]; _update = [[uibutton alloc]initwithframe:cgrectmake(10, 90, 100, 20)]; [_update settitle:@"update" forstate:uicontrolstatenormal]; [_update settitlecolor:[uicolor blackcolor] forstate:uicontrolstatenormal]; [_update addtarget:self action:@selector(updateaction) forcontrolevents:uicontroleventtouchupinside]; _query = [[uibutton alloc]initwithframe:cgrectmake(10, 120, 100, 20)]; [_query settitle:@"query" forstate:uicontrolstatenormal]; [_query settitlecolor:[uicolor blackcolor] forstate:uicontrolstatenormal]; [_query addtarget:self action:@selector(queryaction) forcontrolevents:uicontroleventtouchupinside]; _sort = [[uibutton alloc]initwithframe:cgrectmake(10, 150, 100, 20)]; [_sort settitle:@"sort" forstate:uicontrolstatenormal]; [_sort settitlecolor:[uicolor blackcolor] forstate:uicontrolstatenormal]; [_sort addtarget:self action:@selector(sortaction) forcontrolevents:uicontroleventtouchupinside]; _tf_name = [[uitextfield alloc]initwithframe:cgrectmake(50, 300, 200, 20)]; _tf_name.placeholder=@"name"; _tf_age = [[uitextfield alloc]initwithframe:cgrectmake(50, 350, 200, 20)]; _tf_age.placeholder=@"age"; [self.view addsubview:_add]; [self.view addsubview:_delete]; [self.view addsubview:_update]; [self.view addsubview:_query]; [self.view addsubview:_sort]; [self.view addsubview:_tf_name]; [self.view addsubview:_tf_age]; } -(void)addaction{ nslog(@"add"); self.name = _tf_name.text; self.age = [_tf_age.text integervalue]; testbean* bean = [[testbean alloc]init]; bean.name = self.name; bean.age = self.age; rlmrealm *realm = [rlmrealm defaultrealm]; [realm transactionwithblock:^{ [realm addobject:bean]; }]; } -(void)deleteaction{ nslog(@"delete"); rlmresults *dogs = [testbean allobjects]; rlmrealm *realm = [rlmrealm defaultrealm]; [realm transactionwithblock:^{ for (testbean *bean in dogs) { [realm deleteobject:bean]; } }]; } -(void)updateaction{ nslog(@"update"); rlmresults *dogs = [testbean allobjects]; [[rlmrealm defaultrealm] transactionwithblock:^{ for (testbean *bean in dogs) { bean.name = @"李四"; } }]; } -(void)queryaction{ nslog(@"query"); rlmresults *dogs = [testbean allobjects]; [[rlmrealm defaultrealm] transactionwithblock:^{ for (testbean *bean in dogs) { nslog(@"%@",bean.name); } }]; } -(void)sortaction{ nslog(@"query"); rlmresults *dogs = [[testbean allobjects] sortedresultsusingkeypath:@"name" ascending:yes]; [[rlmrealm defaultrealm] transactionwithblock:^{ for (testbean *bean in dogs) { nslog(@"%@",bean.name); } }]; } - (void)didreceivememorywarning { [super didreceivememorywarning]; // dispose of any resources that can be recreated. } @end
以上这篇基于ios realm数据库的使用实例详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。