美文网首页
Cyy大神持久化存储二维码

Cyy大神持久化存储二维码

作者: 不说谎的匹诺曹Y | 来源:发表于2017-05-03 14:51 被阅读0次

    咱们今天来讲一下   持久化存储

    先导入两个第三方库

    导入以下依赖库

    AppDelegate.M

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    [UMessage startWithAppkey:@"your appkey" launchOptions:launchOptions];

    //注册通知,如果要使用category的自定义策略,可以参考demo中的代码。

    [UMessage registerForRemoteNotifications];

    //iOS10必须加下面这段代码。

    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];

    center.delegate=self;

    UNAuthorizationOptions types10=UNAuthorizationOptionBadge|  UNAuthorizationOptionAlert|UNAuthorizationOptionSound;

    [center requestAuthorizationWithOptions:types10    completionHandler:^(BOOL granted, NSError * _Nullable error) {

    if (granted) {

    //点击允许

    //这里可以添加一些自己的逻辑

    } else {

    //点击不允许

    //这里可以添加一些自己的逻辑

    }

    }];

    return YES;

    }

    -(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{

    //1.2.7版本开始不需要用户在手动注册Devicetoken,SDK 会自动注册

    //[UMessage rigisterDeviceToken:deviceToken];

    }

    -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{

    [UMessage didReceiveRemoteNotification:userInfo];

    }

    //iOS10新增:处理前台收到通知的代理方法

    -(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{

    NSDictionary *userInfo =notification.request.content.userInfo;

    if ([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {

    //应用处于前台时的远程推送接受

    //关闭U-Push自带的弹出框

    [UMessage setAutoAlert:NO];

    //必须加这句代码

    [UMessage didReceiveRemoteNotification:userInfo];

    }else{

    //应用处于前台时的本地推送接受

    }

    //当应用处于前台时提示设置  需要哪个可以设置哪一个

    completionHandler(UNNotificationPresentationOptionSound|UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionAlert);

    }

    //iOS10新增:处理后台点击通知的代理方法

    -(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{

    NSDictionary * userInfo = response.notification.request.content.userInfo;

    if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {

    //应用处于后台时的远程推送接受

    //必须加这句代码

    [UMessage didReceiveRemoteNotification:userInfo];

    }else{

    //应用处于后台时的本地推送接受

    }

    }

    LoadData   添加查询方法   打开关闭数据库

    +(instancetype) shareLoadData;

    //打开数据库

    -(void)openDataBase;

    -(void)createDataBase;

    -(void)addMusicData:(Model *)mod;

    -(NSMutableArray *)selectDataBase;

    //关闭数据库

    -(void)closeDataBase;

    实现LoadData 方法

    +(instancetype)shareLoadData{

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

    ld = [[LoadData alloc]init];

    });

    return ld;

    }

    +(instancetype)allocWithZone:(struct _NSZone *)zone{

    if (!ld) {

    ld = [super allocWithZone:zone];

    }

    return ld;

    }

    -(id)copy{

    return self;

    }

    -(id)mutableCopy{

    return self;

    }

    -(void)openDataBase{

    //创建沙盒路径

    NSString *str = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];

    NSLog(@"123123123%@",str);

    //在沙盒路径下创建一个db文件

    NSString *path = [str stringByAppendingPathComponent:@"aiyo.db"];

    NSLog(@"path == %@",path);

    //如果存在直接打开 不存在 创建后打开

    if (sqlite3_open([path UTF8String], &(sqliteDB)) == SQLITE_OK) {

    NSLog(@"打开成功");

    [self createDataBase];

    }

    }

    //初始化数据库  创建数据库

    -(void)createDataBase{

    //创建预编译指针

    const char *sqla  = "create table if not exists aiya (id integer primary key , image text)";

    //将sql语句编译到预编译指针内部

    sqlite3_stmt *stmt;

    //执行预编译指针

    sqlite3_prepare(sqliteDB, sqla , -1, &stmt, nil);

    if (sqlite3_step(stmt) == SQLITE_DONE) {

    NSLog(@"创建成功");

    }

    //释放预编译指针

    sqlite3_finalize(stmt);

    }

    //添加数据

    -(void)addMusicData:(Model *)mod{

    const char *sqla = "insert into aiya values(null,?)";

    sqlite3_stmt *stmt;

    sqlite3_prepare(sqliteDB, sqla, -1, &stmt, nil);

    sqlite3_bind_text(stmt, 1, [mod.image UTF8String], -1, nil);

    if (sqlite3_step(stmt) == SQLITE_DONE) {

    NSLog(@"添加成功");

    }

    sqlite3_finalize(stmt);

    }

    //查询数据

    -(NSMutableArray *)selectDataBase{

    const char *sqla = "select *from aiya";

    sqlite3_stmt *stmt;

    sqlite3_prepare(sqliteDB, sqla, -1, &stmt, nil);

    NSMutableArray *Marr = [NSMutableArray array];

    while (sqlite3_step(stmt) == SQLITE_ROW) {

    Model *model = [[Model alloc]init];

    model.image = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];

    data = [[NSData alloc]initWithBase64Encoding:model.image];

    [Marr addObject:data];

    NSLog(@"%ld ",Marr.count);

    }

    return Marr;

    }

    -(void)closeDataBase{

    sqlite3_close(sqliteDB);

    }

    添加一个模型属性

    然后开始拖拽控件

    #import "ViewController.h"

    #import <CoreImage/CoreImage.h>

    #import"QRCodeGenerator.h"

    #import "LoadData.h"

    #import "Model.h"

    #import "TwoViewController.h"

    @interface ViewController ()

    {

    Model *mod;

    }

    @property (weak, nonatomic) IBOutlet UITextField *text;

    @property (weak, nonatomic) IBOutlet UIImageView *image;

    @end

    @implementation ViewController

    - (IBAction)creat:(id)sender {

    self.image.image = [QRCodeGenerator qrImageForString:self.text.text imageSize:self.image.bounds.size.width];

    }

    - (IBAction)baocun:(id)sender {

    [[LoadData shareLoadData]openDataBase];

    mod = [[Model alloc]init];

    NSData *data = UIImageJPEGRepresentation(self.image.image, 0.5f);

    mod.image = [data base64Encoding];

    [[LoadData shareLoadData]addMusicData:mod];

    [[LoadData shareLoadData]closeDataBase];

    TwoViewController *two = [[TwoViewController alloc]init];

    [self presentViewController:two animated:YES completion:nil];

    }

    开始创建表格用可变数组接收

    _table = [[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStylePlain];

    _table.delegate = self;

    _table.dataSource = self;

    _table.rowHeight = 180;

    [self.view addSubview:_table];

    //自定义方法

    [self select];

    [_table reloadData];

    -(void)select{

    [[LoadData shareLoadData]openDataBase];

    _Marr = [NSMutableArray array];

    _Marr = [[LoadData shareLoadData]selectDataBase];

    [[LoadData shareLoadData]closeDataBase];

    }

    -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

    return _Marr.count;

    }

    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    static NSString *cellID = @"";

    TwoTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];

    if (!cell) {

    cell = [[TwoTableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellID];

    }

    cell.img.image = [UIImage imageWithData:_Marr [indexPath.row]];

    return cell;

    }

    创建一个UIImageView 添加到控件自定义Cell中

    -(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{

    if (self =  [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {

    [self.contentView addSubview:self.img];

    }

    return self;

    }

    -(UIImageView *)img{

    if (!_img) {

    _img = [[UIImageView alloc]initWithFrame:CGRectMake(25, 25, 130, 130)];

    }

    return _img;

    }



    相关文章

      网友评论

          本文标题:Cyy大神持久化存储二维码

          本文链接:https://www.haomeiwen.com/subject/fozvzttx.html