使用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 ...
随机推荐
- C#操作Excel总结
0. 导入命名空间: 1 2 3 4 using Microsoft.Office.Core; using Microsoft.Office.Interop.Excel; using System. ...
- 利用@media实现IE hack
虽然对IE深恶痛绝,却不能拒绝. 使用@media实现IE hack的方法,以记之. 仅IE6和IE7识别@media screen\9 { .selector { property: value; ...
- 微信订阅号开发之token验证后,自动回复消息功能做好,发送消息没有返回
相信很多人会跟我一样,token验证之后,发送消息给订阅号,没有消息返回. 以下,说一下我辛苦调试得到的解决办法: 首先,token验证: 自己写的token一直验证失败,找了好久,没有发现bug.实 ...
- php的一些小笔记--数组
array_chunk 分割数组 第三个参数确定分割的数组是否维持原样key,默认为false array_column 返回数组指定的列 array_combine 合并数组 第一个数组 ...
- LFS,编译自己的Linux系统 - 编译临时系统
编译GCC-4.8.2 PASS 1 解压并重命名 cd /mnt/lfs/sources tar -Jxf ../mpfr-3.1.2.tar.xz mv mpfr-3.1.2 mpfr tar - ...
- USB系列之九:基于ASPI的U盘驱动程序
USB系列之七和之八介绍了ASPI,并通过一些实例说明了基于ASPI的编程方法,本文使用前两篇文章介绍的知识以及以前介绍的有关DOS驱动程序下驱动程序的内容实际完成一个简单的基于ASPI的U盘驱动程序 ...
- 并行编译加快VS C++项目的编译速度
最近编译的项目都比较大,话说自己的电脑配置还行,但编译所花的时间还是很长,遇到需要重新编译整个项目的时候真的有回宿舍睡一觉的冲动.昨天一不小心被我发现了一款软件Xoreax IncrediBuild ...
- C# 集合详解 (适合新手)
System.Collections 命名空间包含接口和类,这些接口和类定义各种对象(如列表.队列.位数组.哈希表和字典)的集合.System.Collections.Generic 命名空间包含定义 ...
- Linux APP源码级编译安装
首先需要了解下tar包. 以下文章作出解释了: http://www.cnblogs.com/laipDIDI/articles/2214270.html http://baike.baidu.com ...
- 2014第3周三JS进阶书籍
本来想尝试每天回答或看已解决的3个问题来学习总结今天的知识点,看了下博文里面的问答,在问的和已解决的都提不起兴趣.就看了下知识库里面一些文章,把里面感觉好的段落再摘录一下,为自己再看时备忘. 第一阶段 ...