使用FMDB,libqrencode实现二维码的生成并且保存到数据库
/** * 1.首先导入第三方库FMDB和libqrencode,添加库libsqlite3.tbd * 禁用arc:FMDatabasePool类和FMDatabaseQueue类 * 禁用arc步骤:点击工程名->Targets->Build Phases ->Compile Sources->双击要禁用的类->输入 -fno-objc-arc
* 添加库步骤:①点击工程名->Targets->Build Phases ->Link Binary With Libraries->点击+号->输入libsqlite3->双击libsqlite3.tbd
* ②点击工程名->Targets->General->翻到页面最底部->找到Link Binary With Libraries->点击+号->输入libsqlite3->双击libsqlite3.tbd/** * 2.在AppDelegate.m中设置根视图控制器 */ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ViewController *vc = [[ViewController alloc]init]; UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:vc]; self.window.rootViewController = nav; return YES;}/** * 3.创建模型类CodeModel,继承自NSObject * 定义模型类的两个属性id和name */@interface CodeModel : NSObject@property (nonatomic,strong)NSString *codeName;@property (nonatomic,assign)int codeId;@end/** * 4.创建业务处理类CodeHandle,继承自NSObject * 导入数据库头文件FMDatabase.h和FMResultSet.h,模型类头文件CodeModel.h * 在.h中声明单例方法,增加数据的方法和查找数据的方法 */+(instancetype)sharedHandle;-(void)insertCode:(CodeModel *)codename;-(NSMutableArray*)getAll;/** * 5.在CodeHandle.m中实现单例类方法 */ #import "CodeHandle.h"static FMDatabase *fmdb;static CodeHandle *_codeHandle;@implementation CodeHandle+(instancetype)sharedHandle{ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _codeHandle = [[CodeHandle alloc]init]; [_codeHandle initDB]; }); return _codeHandle;}+(instancetype)allocWithZone:(struct _NSZone *)zone{ if (!_codeHandle) { _codeHandle = [super allocWithZone:zone]; } return _codeHandle;}-(void)initDB{ NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]; NSString *path = [docPath stringByAppendingPathComponent:@"sjk.sqlite"] ; NSLog(@"path = %@",path); fmdb = [[FMDatabase alloc]initWithPath:path]; if ([fmdb open]) { [fmdb executeUpdate:@"CREATE TABLE CODE(codeId INTEGER PRIMARY KEY AUTOINCREMENT,codeName TEXT)"]; [fmdb close]; } else NSLog(@"创建数据表失败!"); }-(void)insertCode:(CodeModel *)codename{
[fmdb open]; BOOL insertSql = [fmdb executeUpdate:@"INSERT INTO CODE VALUES(null,?)",codename.codeName]; if (insertSql) { NSLog(@"添加成功"); } else
{
NSLog(@"添加失败");
} [fmdb close];
}-(NSMutableArray *)getAll{ NSMutableArray *arr = [NSMutableArray array]; [fmdb open]; FMResultSet *fmset = [[FMResultSet alloc]init]; fmset = [fmdb executeQuery:@"SELECT *FROM CODE"]; while ([fmset next]) { int codeId = [fmset intForColumn:@"codeId"] ; NSString *codeName = [fmset stringForColumn:@"codeName"]; CodeModel *cm = [[CodeModel alloc]init]; cm.codeId = codeId; cm.codeName = codeName; [arr addObject:cm]; } return arr;}/** * 6.在控制器类中实现生成二维码和跳转到下一界面 * 导入生成二维码的头文件QRCodeGenerator.h, * 模型类头文件CodeModel.h,业务处理类头文件CodeHandle.h,下一界面头文件ShowResultTableViewController.h */#import "ViewController.h"@interface ViewController (){ UITextField *inputTF; UIImageView *imgView;}@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; UIBarButtonItem *right = [[UIBarButtonItem alloc]initWithTitle:@"tiaozhuan" style:UIBarButtonItemStylePlain target:self action:@selector(tiaozhuan)]; self.navigationItem.rightBarButtonItem =right; inputTF = [[UITextField alloc]initWithFrame:CGRectMake(100, 150, 200, 30)]; inputTF.borderStyle = UITextBorderStyleRoundedRect; [self.view addSubview:inputTF]; UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; btn.frame = CGRectMake(300, 150, 50, 30); [btn setTitle:@"生成" forState:UIControlStateNormal]; [btn addTarget:self action:@selector(addCode) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:btn]; imgView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 200, 200, 200)]; [self.view addSubview:imgView];}-(void)tiaozhuan{ ShowResultTableViewController *show = [[ShowResultTableViewController alloc]init]; [self.navigationController pushViewController:show animated:YES];}-(void)addCode{ UIImage *img = [QRCodeGenerator qrImageForString:inputTF.text imageSize:200.0]; imgView.image = img; NSString *imgPath = [NSString stringWithFormat:@"%@/%@.png",NSHomeDirectory(),inputTF.text]; [UIImagePNGRepresentation(img) writeToFile:imgPath atomically:YES]; NSLog(@"imgPath = %@",imgPath); CodeModel *cm = [[CodeModel alloc]init]; cm.codeName = inputTF.text; [[CodeHandle sharedHandle]insertCode:cm]; NSLog(@"codeId = %d",cm.codeId);}/** * 7.在下一界面设置单元格显示内容为二维码图片和输入的文本内容 */#import "ShowResultTableViewController.h"#import "CodeModel.h"#import "CodeHandle.h"@interface ShowResultTableViewController (){ NSMutableArray *arr;}@end@implementation ShowResultTableViewController- (void)viewDidLoad { [super viewDidLoad]; }{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return arr.count;}-(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; arr = [[CodeHandle sharedHandle]getAll]; NSLog(@"arr = %@",arr); [self.tableView reloadData];}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *str = @"sdf"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:str ]; if (!cell) { cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:str]; } CodeModel *cm = arr[indexPath.row]; cell.textLabel.text = cm.codeName; NSString *imgPath = [NSString stringWithFormat:@"%@/%@.png",NSHomeDirectory(),cm.codeName]; UIImage *img = [UIImage imageWithContentsOfFile:imgPath]; cell.imageView.image = img; return cell;}@end使用FMDB,libqrencode实现二维码的生成并且保存到数据库的更多相关文章
- iOS 二维码的生成 QREncoder
生成二维码: 在生成二维码的库中QREncoder最为常见,但是由于中文字符的特殊性,生成中文的时候有时会出现一定的错误,所以建议使用libqrencode,是一个纯C编写的类库. 以libqrenc ...
- 基于Metronic的Bootstrap开发框架经验总结(14)--条码和二维码的生成及打印处理
在很多项目里面,对条形码和二维码的生成和打印也是一种很常见的操作,在Web项目里面,我们可以利用JS生成条形码和二维码的组件有很多.本文引入两个比较广泛使用的JS组件,用来处理条形码和二维码的生成处理 ...
- Java 条形码 二维码 的生成与解析
Barcode简介 Barcode是由一组按一定编码规则排列的条,空符号,用以表示一定的字符,数字及符号组成的,一种机器可读的数据表示方式. Barcode的形式多种多样,按照它们的外观分类: Lin ...
- ios-深度解析二维码的生成与使用
利用一个小demo来对二维码进行学习,总共四个界面(主界面,生成二维码界面,识别二维码界面,扫描二维码界面) 一.二维码的介绍 1.什么是二维码? 二维条码/二维码是用某种特定的 ...
- Android zxing 解析二维码,生成二维码极简demo
zxing 官方的代码很多,看起来很费劲,此demo只抽取了有用的部分,实现了相机预览解码,解析本地二维码,生成二维码三个功能. 简化后的结构如下: 废话少说直接上代码: BaseDecodeHand ...
- Swift开发小技巧--扫描二维码,二维码的描边与锁定,设置扫描范围,二维码的生成(高清,无码,你懂得!)
二维码的扫描,二维码的锁定与描边,二维码的扫描范围,二维码的生成(高清,无码,你懂得!),识别相册中的二维码 扫描二维码用到的三个重要对象的关系,如图: 1.懒加载各种类 // MARK: - 懒加载 ...
- ZXing二维码的生成和解析
Zxing是Google提供的关于条码(一维码.二维码)的解析工具,提供了二维码的生成与解析的方法, 现在我简单介绍一下使用Java利用Zxing生成与解析二维码 注意: 二维码的生成需要借助辅助类( ...
- Android实例-实现扫描二维码并生成二维码(XE8+小米5)
相关资料: 第三方资料太大没法写在博文上,请下载CSDN的程序包. 程序包下载: http://download.csdn.net/detail/zhujianqiangqq/9657186 注意事项 ...
- C# ZXing.Net生成二维码、识别二维码、生成带Logo的二维码(二)
1.使用ZXint.Net生成带logo的二维码 /// <summary> /// 生成带Logo的二维码 /// </summary> /// <param name ...
随机推荐
- (转)实例详解CSS中position的fixed属性使用
关于fixed属性,在什么情况下需要用,怎么用,首先,我们应该先了解下fixed属性的说明:fixed总是以body为定位时的对象,总是根据浏览器的窗口来进行元素的定位,通过"left&qu ...
- IE下使用jquery ajax失效
ie是根据请求的url是不是一样来是否发送请求,对于同一请求,ie只发送一次http请求,得到缓存之后就不再请求,所以同一请求发送多次,但ie实际是不会发送的 在你的第二次请求之前 使用 $.ajax ...
- c_str()函数
#include <string.h> const char *c_str(); 返回字符串地址,是一个c函数,返回类型const char*c_str()函数返回一个指向正规C字符串的指 ...
- Mysql操作个人收集
1.MySQL修改root密码 mysql> UPDATE user SET Password=PASSWORD('xxxx') where USER='root'; mysql> FLU ...
- java中的IO流读取文件
1 InputStream类和OutputStream类 InputStream.read()方法从文件中读取一个字节(0-255),然后将此字节转换成对应的整数返回.假设一个文件的编码为utf-8编 ...
- 利用glibc中锁结构的信息解决死锁问题
首先非常感谢老丁和老李同学的帮助,没有他们这个问题估计又得搞很久.遇见这个问题,真是头疼.不熟悉代码.不熟悉流程,但是领导还是把活给排下来了(实在不解),只能硬着头皮找了. 问题是这样的,cac ...
- 【solr基础教程之九】客户端
一.Java Script 1.由于Solr本身可以返回Json格式的结果,而JavaScript对于处理Json数据具有天然的优势,因此使用JavaScript实现Solr客户端是一个很好的选择. ...
- poi操作excel设置数据有效性
private void setDataValidationList(short firstRow,short endRow,short firstCol, short endCol,String d ...
- yii2中的url美化
在yii2中,如果想实现类似于post/1,post/update/1之类的效果,官方文档已经有明确的说明 但是如果想把所有的controller都实现,这里采用yii1的方法 'rules' =&g ...
- Android应用开发中Intent的作用及使用方法
Intent是一种运行时绑定(run-time binding)机制,它能在程序运行过程中连接两个不同的组件.通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意 ...