2 "name": "DPDBFramework",
4 "summary": "面向对象的本地化持久方案,保存用 save,删除用 delete.",
5 "description": "#项目简介\n框架主要解决苹果开发过程中,数据本地持久化问题。开发初期,选用了sqlite,就一直折腾至今,不爱用`coredata`,或许它更加好用,不过人总有那么点执着,或者说固执,不是吗?废话不多说,开始介绍。\n#方法总览\n\n - save: //保存或更新对象\n - deleteMe; //删除自身对象\n - pk; //得到对象主键,默认为-1\n + queryByPk: //根据主键查询对象\n + saveObjects:; //批量保存对象\n + deleteAll; //级连删除对象\n + deleteByPks:; //批量删除对象,参数是主键数组\n + allObjects; //查询所有对象\n + (NSArray *)objectsWithPage:(NSInteger)page pageLimit:(NSInteger)pageLimit; //分页查询\n + (NSArray *)findByCriteria:(NSString *)criteriaString\n page:(NSInteger)page\n pageLimit:(NSInteger)pageLimit; //分页条件查询\n #待添加\n + 保存文件(包括图片,视频等)\n#方法使用说明\n此部分不一一讲解每个方法,根据实际项目中对象持久经常遇到的两种情况分别说明,无关联对象和有关联对象。\n##无关联对象\n直接上代码讲解简单明了\n\n\n\n <!-- NoRelationshipObject.h -->\n #import \"DPDBObject.h\"\n @interface NoRelationshipObject : DPDBObject\n @property (nonatomic,strong) NSString *desc;\n @property (nonatomic,assign) NSInteger aNumber;\n @property (nonatomic,assign) int aInt;\n @property (nonatomic,assign) float aFloat;\n @property (nonatomic,assign) double aDouble;\n @end\n\n上面申明了一个无关联对象,如何保存呢,请看下面\n\n\n <!-- lang: cpp -->\n NoRelationshipObject *nrObject = [[NoRelationshipObject alloc] init];\n nrObject.desc = @\"这是在测试无关联对象\";\n noObject.aInt = 2012;\n // 此处略去其它属性的赋值\n //保存到数据库\n [noObject save];\n\n如何验证数据库中是否保存成功,打开数据库,查看数据库中是否存在此记录。\n\n##一对一关联对象\n新建一个类`OneToOneObject`\n\n <!-- OneToOneObject.h -->\n #import \"DPDBObject.h\"\n @interface OneToOneObject : DPDBObject\n @property (nonatomic,strong) NSString *desc;\n @property (nonatomic,strong) NoRelationshipObject *nrObject;\n @end\n\n按照上面方法,创建一个`NoRelationshipObject `对象`nrObject`,再实例化一个`OneToOneObject`对象`otoObject`\n\n OneToOneObject *otoObject = [[OneToOneObject alloc] init];\n otoObject.desc = @\"这是在测试一对一关联对象\";\n otoObject.nrObject = nrObject;\n [otoObject save];\n一切如你所料,没有任何意外,如何验证保存成功呢,当然可以在数据库中查找对应的记录是否产生,也可以通过程序检测\n\n //接上\n NSInteger pk = [otoObject pk];\n OneToOneObject *object = [OneToOneObject queryByPk:pk];\n if(object){\n //可以打断点验证,也可以写代码验证\n }else{\n NSLog(@\"验证失败,没有保存成功\");\n }\n没有任何悬念的结束了,接下来将一对多关系的保存;\n##一对多关联对象的保存\n前两种情况都比较简单,第三种情况就比较复杂了,想了很多方法,包括动态判断类型,配置文件管理,命名判别等等,最后由于种种问题给pass掉了(如果有兴趣可以留言继续探讨这个问题)\n还是直接上代码,新建一个类`OneToManyObject`\n\n <!-- OneToManyObject.h -->\n #import \"DPDBObject.h\"\n @interface OneToManyObject : DPDBObject\n @property (nonatomic,strong) NSString *desc;\n @property (nonatomic,strong) NSArray *nrArrs;\n @end\n\n类里面有个集合类型属性,由于无法像JAVA一样显式指定里面的类型,所以在第一次查询的时候不知道如何“包装”得到的数据,所以需要在`OneToManyObject.m`方法里面加上一个类方法`+ (NSDictionary *)collectionTypeInfo;`\n\n #import \"OneToManyObject.h\"\n @implementation OneToManyObject\n + (NSDictionary *)collectionTypeInfo\n {\n return\n @{\n @\"nrArrs\":NSStringFromClass([NoRelationshipObject class])\n };\n }\n相信看到代码已经明白是什么意思了,指定集合类型的元素类型,这下我就明白了,原来里面装的是 `NoRelationshipObject`对象,那我就按照`NoRelationshipObject`方法包装。\n使用代码如下\n\n OneToManyObject *otmObject = [[OneToManyObject alloc] init];\n NSMutableArray *objects = [NSMutableArray array];\n for (NSInteger i = 0 ; i < 10 ; i++){\n NoRelationshipObject *nrObject = [[NoRelationshipObject alloc] init];\n nrObject.desc = [NSString stringWithFormat:@\"这是在测试无关联对象-%ld\",(long)i];\n [objects addObject:nrObject];\n }\n otmObject.nrArrs = objects;\n [otmObject save];\n全部搞定,接下来就是验证了,可以参考上面的验证方式进行验证!\n\n#适用的情况\n本框架善不完整,有几方面的功能没有实现,\n\n - 事务支持,整个框架没有涉及到事务处理,如果有这方面业务需要的,要让你们失望了\n - 属性类型修改,对于同一个属性名,有修改属性类型的,暂时没有实现,这个功能后期可能会加入进去\n如果对上面两个需求不是很强烈的,可以尝试下哟,有问题欢迎一起探讨!!\n\n#参考&致谢\n这个是很重要滴,喝水不忘挖井人,框架的灵感来自sqliteobjectpersistence,从一行一行读里面代码学到了很多东西,它里面的某些功能至今也没有实现,不过对里面频繁计算部分做了优化,用了缓存换取CPU计算,带来了时间上的优势,再次感谢sqliteobjectpersistence作者。",
6 "homepage": "http://my.oschina.net/juwenz/blog",
9 "juwenz": "jabarier@gmail.com"
15 "git": "https://git.oschina.net/juwenz/DoPersistenceFramework.git",
20 "DoPersistenceFramework/Classes/**/*.{h,m}"
22 "exclude_files": "Classes/Exclude",
23 "frameworks": "Foundation",
29 "HEADER_SEARCH_PATHS": "$(SDKROOT)/usr/include/sqlite3"