/** * 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->Build Phases ->libsqlite3.tbd*点击工程名->Targets->点击工程名->Targets->Link Binary With Libraries->点击+号->输入libsqlite3->双击libsqlite3.tbdlibsqlite3.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; returnYES;}/** * 3.创建模型类CodeModel,继承自NSObject * 定义模型类的两个属性id和name */@interface CodeModel : NSObject@property (nonatomic,strong)NSString *codeName;@property (nonatomic,assign)intcodeId;@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"staticFMDatabase *fmdb;staticCodeHandle *_codeHandle;@implementation CodeHandle+(instancetype)sharedHandle{ staticdispatch_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]; BOOLinsertSql = [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]) { intcodeId = [fmset intForColumn:@"codeId"] ; NSString *codeName = [fmset stringForColumn:@"codeName"]; CodeModel *cm = [[CodeModel alloc]init]; cm.codeId = codeId; cm.codeName = codeName; [arr addObject:cm]; } returnarr;}/** * 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)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { returnarr.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 { staticNSString *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; returncell;}@end
转载于:https://www.cnblogs.com/Bo-tree/p/5071011.html