/**
 * 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];  
}
 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    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实现二维码的生成并且保存到数据库的更多相关文章

  1. iOS 二维码的生成 QREncoder

    生成二维码: 在生成二维码的库中QREncoder最为常见,但是由于中文字符的特殊性,生成中文的时候有时会出现一定的错误,所以建议使用libqrencode,是一个纯C编写的类库. 以libqrenc ...

  2. 基于Metronic的Bootstrap开发框架经验总结(14)--条码和二维码的生成及打印处理

    在很多项目里面,对条形码和二维码的生成和打印也是一种很常见的操作,在Web项目里面,我们可以利用JS生成条形码和二维码的组件有很多.本文引入两个比较广泛使用的JS组件,用来处理条形码和二维码的生成处理 ...

  3. Java 条形码 二维码 的生成与解析

    Barcode简介 Barcode是由一组按一定编码规则排列的条,空符号,用以表示一定的字符,数字及符号组成的,一种机器可读的数据表示方式. Barcode的形式多种多样,按照它们的外观分类: Lin ...

  4. ios-深度解析二维码的生成与使用

    利用一个小demo来对二维码进行学习,总共四个界面(主界面,生成二维码界面,识别二维码界面,扫描二维码界面)   一.二维码的介绍   1.什么是二维码?        二维条码/二维码是用某种特定的 ...

  5. Android zxing 解析二维码,生成二维码极简demo

    zxing 官方的代码很多,看起来很费劲,此demo只抽取了有用的部分,实现了相机预览解码,解析本地二维码,生成二维码三个功能. 简化后的结构如下: 废话少说直接上代码: BaseDecodeHand ...

  6. Swift开发小技巧--扫描二维码,二维码的描边与锁定,设置扫描范围,二维码的生成(高清,无码,你懂得!)

    二维码的扫描,二维码的锁定与描边,二维码的扫描范围,二维码的生成(高清,无码,你懂得!),识别相册中的二维码 扫描二维码用到的三个重要对象的关系,如图: 1.懒加载各种类 // MARK: - 懒加载 ...

  7. ZXing二维码的生成和解析

    Zxing是Google提供的关于条码(一维码.二维码)的解析工具,提供了二维码的生成与解析的方法, 现在我简单介绍一下使用Java利用Zxing生成与解析二维码 注意: 二维码的生成需要借助辅助类( ...

  8. Android实例-实现扫描二维码并生成二维码(XE8+小米5)

    相关资料: 第三方资料太大没法写在博文上,请下载CSDN的程序包. 程序包下载: http://download.csdn.net/detail/zhujianqiangqq/9657186 注意事项 ...

  9. C# ZXing.Net生成二维码、识别二维码、生成带Logo的二维码(二)

    1.使用ZXint.Net生成带logo的二维码 /// <summary> /// 生成带Logo的二维码 /// </summary> /// <param name ...

随机推荐

  1. dtree基础

    最近用到了dtree来建立树,纠结过好久后,终于有了些门道,下面的总结希望对咪咪们有些帮助: dtree用来建立静态树或者动态树都是很方便的,老外给提供了整个的JS,然后我们只是操心这个树中存放的元素 ...

  2. gdal_merge.py

    1 gdal_merge.py: 合并(Merge)/镶嵌(Mosaic)工具.要求图像必须是相同坐标系统.具有相同的波段数:可以不同分辨率,可以有重叠区域(后加入图像覆盖先加入的图像). 注意:只能 ...

  3. 疯狂安卓Android自学笔记

    开发者必备自学工具: 谷歌搜索:www.yundou.info Android原版开发文档 (英文) Doc http://www.phoned.cn/docs/reference/android/v ...

  4. 【转载】安装和使用花生壳(linux)

    安装和使用花生壳(linux) 一.安装说明(以CentOS 5为例) 1.安装必要的开发包 [root@localhost ~]# yum install gcc gcc-c++ autoconf ...

  5. Windows平台字符的存储和输出分析

    1. 引言 (写于2011-07-30) 在Windows NT系列的操作系统中最常用的两种字符集是ANSI和Unicode.ANSI是一种泛称,每一个国家或地区的ANSI编码都不一样,比如在Wind ...

  6. 解决ScrollView中嵌套ListView滚动效果冲突问题

    在ScrollView中嵌套使用ListView,ListView只会显示一行到两行的数据.起初我以为是样式的问题,一直在对XML文件的样 式进行尝试性设置,但始终得不到想要的效果.后来在网上查了查, ...

  7. shell date格式化输出

    1-  echo `date "+%Y-%m-%d %H:%M:%S"` 2014-11-13 15:06:26 2-  echo `date "+%y-%m-%d %H ...

  8. php的一些小笔记--数组

    array_chunk  分割数组  第三个参数确定分割的数组是否维持原样key,默认为false array_column 返回数组指定的列 array_combine 合并数组     第一个数组 ...

  9. Kindeditor上传图片到七牛云存储插件(PHP版)

    由于工作需要,要使用第三方存储作为图床,发现七牛云挺不错,又可以免费使用10G的空间,决定先试试. 项目中使用的是Kindeditor作为网页编辑器的,七牛云的插件里没有现成的Kindeditor的插 ...

  10. SQL Server 2008空间数据应用系列七:基于Bing Maps(Silverlight) 的空间数据展现

    原文:SQL Server 2008空间数据应用系列七:基于Bing Maps(Silverlight) 的空间数据展现 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft ...