使用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];  
}
 - (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
相關文章
相關標籤/搜索