偶然间看到接触到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