• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

CoreDataEnvirSample: 一个 CoreData 的轻便封装。提供简单的CRUD数据操作,不再纠缠 ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

CoreDataEnvirSample

开源软件地址:

https://gitee.com/dehengxu/CoreDataEnvirSample

开源软件介绍:

CoreDataEnvir (since 2011-05-25) latest version 0.4

CoreDataEnvir 是一个 CoreData 框架的封装。提供了一种简单的方式来使用 CoreData ,它也为你的并发编程提供了线程安全支持。你可以在每个线程上运行一个单独的实例来进行并发编程。

第一步:

注册你的数据库文件名

	[CoreDataEnvir registDatabaseFileName:@"db.sqlite"];

注册你的模型文件名(不包含文件扩展名)

	[CoreDataEnvir registModelFileName:@"SampleModel"];

简单的数据库访问:

我们假设 Book 类是你的App中一个代表书籍对象的模型类。它有一些成员域 name, author 等等。

还有一个叫 "约翰史蒂芬" 的作者,写了一本传记叫 "拿破仑"

添加一个新记录

[Book insertItemWithFillingBlock:^(id item) {	item.name = @"约翰史蒂芬";	item.author = @"拿破仑";}];

查询一批记录

//查询 约翰史蒂芬 写得所有书籍NSArray *books= [Feed itemsWithFormat:@"author = %@",  @"约翰史蒂芬"];

查询一条记录

//查找约翰史蒂芬写的拿破仑传记Book *book = [Book lastItemWithFormat:@"name = %@ && author = %@", @"拿破仑", @"约翰史蒂芬"];

删除一条记录

[CoreDataEnvir asyncMainInBlock:^(CoreDataEnvir *db) {		[db deleteDataItem:book];}];

删除多条记录

[CoreDataEnvir asyncMainInBlock:^(CoreDataEnvir *db) {		[db deleteDataItemSet:books];}];

并发编程:

On main thread

你可以在主线程上做一些轻量级的操作,但最好不要影响到你的UI响应。所有以上介绍的数据操作,默认都是必须运行在主线程上的,否则 CoreDataEnvir 自己会主动抛出异常。所以你要注意这方面的使用,如果你不确定当前是否主线程,可以这么做:

你也可以明确地在主线程上使用 CoreDataEnvir

这样会让你感到比较有底一些:

[CoreDataEnvir asyncMainInBlock:^(CoreDataEnvir *db) {	[Book insertItemWithFillingBlock:^(id item) {		item.name = @"拿破仑";		item.author = @"约翰史蒂芬";	}];}];

在后台线程

CoreDataEnvir 也准备了一个后台 GCD 队列供你使用。

Block asyncBackgroundInBlock 将会在 void(^)(CoreDataEnvir *db) 调用结束后,自动将变动保存到数据库中。

你不必像老版本一样直接调用 [db saveDataBase];

[CoreDataEnvir asyncBackgroundInBlock:^(CoreDataEnvir *db) {	[Book insertItemOnBackgroundWithFillingBlock:^(id item) {		item.name = @"拿破仑";		item.author = @"约翰史蒂芬";	}];}];

这样在并发编程中 CoreData 的使用变得更加方便了。

几个快捷方法

必须在 GCD 主队列上运行:

  • + (void)asyncMainInBlock:(void(^)(CoreDataEnvir *db))CoreDataBlock;
  • + (id)insertItemWithFillingBlock:(void(^)(id item))fillingBlock;
  • + (NSArray *)itemsWithFormat:(NSString *)fmt,...;...

必须在后台 GCD 队列上运行,你可以使用这些方法名称中包含 Background 的API:

  • + (void)asyncBackgroundInBlock:(void(^)(CoreDataEnvir *db))CoreDataBlock;
  • + (id)insertItemOnBackgroundWithFillingBlock:(void(^)(id item))fillingBlock;
  • + (NSArray *)itemsOnBackgroundWithFormat:(NSString *)fmt,...;...

或者你想运行在你自己的 GCD 队列上,你可以选择这些 API:

  • + (CoreDataEnvir *)createInstance; you'd better hold this instance for future.
  • - (void)asyncInBlock:(void(^)(CoreDataEnvir *db))CoreDataBlock;

如果你是一个 CoreData 新人,请遵守以下军规:

  • 如果你想以后使用你的 NSManagedObject 对象,你不要释放 CoreDataEnvir 对象,否则模型对象都将失效。

  • 如果你想在多线程上操作数据库,一定要确保每个线程有自己独立的 NSManagedObjectContext 对象。

PS:在 CoreDataEnvir 中,请确保你的 NSManagedObject 对象是在主线程上从 [CoreDataEnvir mainInstance] 中获取的对象,或者在后台线程上从 [CoreDataEnvir backgroundInstance] 得到的对象。这两个对象是不会被释放的,通常情况下,CoreDataEnvir 提供的两个线程就能应付常见的并发情况了。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap