### Core data 数据库入门及提升
如果对你有帮助或者你很喜欢的话请star,感谢支持
----
这里主要是讲如何使用系统自带的 CoreData 类对数据持久化到本地的操作,对于初学者十分适合使用,作为作者的我,将所有必要的注释全部写的清楚明了,使得 ios 开发人员在参考此文档时既有 demo 又有解释,实现快速上手.
----
- 插入数据/增加数据
````objc
/* 增 */
- (void)addAction {
Test *obj = [NSEntityDescription insertNewObjectForEntityForName:@"Test" inManagedObjectContext:self.app_delegate.managedObjectContext];
UserInfoModel *model = [[UserInfoModel alloc]init];{
model.age = arc4random_uniform(100);
model.sex = arc4random_uniform(2);
model.address = @"江苏省南京市江宁区将军大道十字路口";
}
obj.score = @(arc4random_uniform(100));
obj.username = @"将军大道";
obj.userinfo = model;
[self.app_delegate saveContext]; //! < 持久化到本地
}
````
- 删除数据
````objc
/* 删 */
- (void)deleteAction{
NSFetchRequest *req = [[NSFetchRequest alloc]initWithEntityName:@"Test"];
NSArray *objs = [self.app_delegate.managedObjectContext executeFetchRequest:req error:nil];
if (objs.count == 0) {
NSLog(@"删除失败 --> 无数据");
return;
}
Test *obj = [objs objectAtIndex:arc4random_uniform((u_int32_t)objs.count)];
[self.app_delegate.managedObjectContext deleteObject:obj]; //! < 删除对象
NSLog(@"删除成功");
[self.app_delegate saveContext]; //! < 持久化到本地
}
````
- 修改数据
````objc
/* 改 */
- (void)changeAction{
NSFetchRequest *req = [[NSFetchRequest alloc]initWithEntityName:@"Test"];
NSArray *objs = [self.app_delegate.managedObjectContext executeFetchRequest:req error:nil];
if (objs.count == 0) {
NSLog(@"修改失败 ---> 无数据");
return;
}
Test *obj = [objs objectAtIndex:arc4random_uniform((u_int32_t)objs.count)];
obj.username = @"修改数据"; //! < 拿到数据对象后直接赋值操作并保存即可
UserInfoModel *mod = [obj.userinfo copy];
mod.address = @"南京市鼓楼区鼓楼地铁站🚇";
obj.userinfo = mod;
NSLog(@"修改成功");
[self.app_delegate saveContext]; //! < 持久化到本地
}
````
- 查找数据(可以条件查找)
````objc
/* 查 */
- (void)getAction{
#warning 对于模型中的数据, NSFetchRequest 并不能对模型中属性值实现过滤操作,但是可以对模型外的数据进行处理
NSFetchRequest *req = [NSFetchRequest fetchRequestWithEntityName:@"Test"];
NSSortDescriptor *desc = [NSSortDescriptor sortDescriptorWithKey:@"score" ascending:NO]; //! < 实现查找的数据降序排列(NO,YES 为升序)
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"score < %ld", 60]; //! < 将分数小于60的查找出来
req.predicate = predicate;
/*
// 分页用到 查找的数量与偏移量
req.fetchLimit = 5; //! < 数量 | 结论:无论查找的数量设置多少,NSFetchRequest
// | ---> 都会遍历所有数据,并且按照事先约定的条件进行
req.fetchOffset = req.fetchLimit * (curPage - 1); //! < 偏移量 | 处理后输出
NSLog(@"**********************第%ld页*************************",curPage);
*/
req.sortDescriptors = @[desc];
NSArray *array = [self.app_delegate.managedObjectContext executeFetchRequest:req error:nil];
#pragma 模型内的数据可以采用数组的条件过滤操作,然而当进行此步骤操作时,分页效果将完全乱了
NSPredicate *array_predicate = [NSPredicate predicateWithFormat:@"userinfo.age < %ld",20];
array = [array filteredArrayUsingPredicate:array_predicate];
if (array.count == 0) {
NSLog(@"**********************无数据*************************");
return;
}
curPage ++;
for (Test *obj in array) {
UserInfoModel *model = obj.userinfo;
NSLog(@"%@ | %02ld | %02ld | %@ | %@",obj.username,model.age,[obj.score integerValue],model.sex?@"男":@"女",model.address);
}
}
````
----
### 数据持久的变量初始化
- NSManagedObjectContext 初始化
````objc
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (!coordinator) {
return nil;
}
_managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
[_managedObjectContext setPersistentStoreCoordinator:coordinator]; //这里需要指定协作器,就是连接对象上下文和模型的桥梁
return _managedObjectContext;
````
- NSManagedObjectModel 初始化
````objc
if (_managedObjectModel != nil) {
return _managedObjectModel;
}
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"文件名" withExtension:@"momd"]; //这里的`文件名`就是在资源文件中生成的`***.xcdatamodeld `文件名,后缀在 url 中必须为 momd,(其实是个文件夹里面的文件,可以输出地址查看)
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; //指定模型地址
return _managedObjectModel;
````
- NSPersistentStoreCoordinator 初始化
````objc
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
NSURL *applicationDocumentsDirectory = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
NSURL *storeURL = [applicationDocumentsDirectory URLByAppendingPathComponent:@"文件名.sqlite"]; //这里是指定数据库存储的地方和名字-->文件名
[_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:nil]; //添加数据库的路径
return _persistentStoreCoordinator;
````
### (必须)如果使用了动态存储,则模型需要遵守/实现 NSCoding 协议
- 例如(实现部分)
````objc
- (void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:[NSNumber numberWithInteger:self.age] forKey:@"age"];
[aCoder encodeObject:[NSNumber numberWithBool:self.sex] forKey:@"sex"];
[aCoder encodeObject:self.address forKey:@"address"];
}
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder{
self = [super init];
if (self) {
self.age = [[aDecoder decodeObjectForKey:@"age"] integerValue];
self.sex = [[aDecoder decodeObjectForKey:@"sex"] boolValue];
self.address = [aDecoder decodeObjectForKey:@"address"];
}
return self;
}
````
### (可选)如果想通过 copy 来完整拷贝一个模型数据到一个新的模型,则模型需要遵守/实现 NSCopying 协议
- 例如(实现部分)
````objc
- (id)copyWithZone:(nullable NSZone *)zone{
UserInfoModel *model = [[UserInfoModel allocWithZone:zone]init];
model.address = self.address;
model.sex = self.sex;
model.age = self.age;
return model;
}
````
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
对象存储,数据的增删改查--这里主要是讲如何使用系统自带的 CoreData 类对数据持久化到本地的操作,对于初学者十分适合使用,作为作者的我,将所有必要的注释全部写的清楚明了,使得 ios 开发人员在参考此文档时既有 demo 又有解释,实现快速上手. 软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备、移动设备等 操作系统:LInux、IOS、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等。 网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络与通信是一个非常广泛的领域,它涉及到计算机科学、电子工程、数学等多个学科的知识。 云计算与大数据:数据集、包括云计算平台、大数据分析、人工智能、机器学习等,云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备。
资源推荐
资源详情
资源评论
收起资源包目录
对象存储,数据的增删改查--这里主要是讲如何使用系统自带的 CoreData 类对数据持久化到本地的操作,对于初学者十分适合使用,作为作者的我,将所有必要的注释全部写的清楚明了,使得 ios 开发人员在参考此文档时既有 demo 又有解释,实现快速上手..zip (20个子文件)
cm
CoreDataTest.xcodeproj
project.pbxproj 14KB
project.xcworkspace
contents.xcworkspacedata 157B
CoreDataTest
UserInfoModel.m 1KB
ViewController.h 220B
Test+CoreDataProperties.h 701B
Base.lproj
Main.storyboard 2KB
LaunchScreen.storyboard 2KB
AppDelegate.h 643B
AppDelegate.m 6KB
main.m 339B
Test+CoreDataProperties.m 449B
CoreDataTest.xcdatamodeld
CoreDataTest.xcdatamodel
contents 785B
.xccurrentversion 265B
Test.h 579B
Test.m 177B
ViewController.m 7KB
Info.plist 1KB
UserInfoModel.h 520B
Assets.xcassets
AppIcon.appiconset
Contents.json 1KB
README.md 7KB
共 20 条
- 1
资源评论
妄北y
- 粉丝: 9668
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功