接上篇文章 更新IOS 版本
话不多少直接上代码

1、主ViewController
ViewController.h

#import <UIKit/UIKit.h>@interface ViewController : UIViewController@end

ViewController.m


#import "ViewController.h"
#import "AppDelegate.h"
#import "ViewHomePageController.h"
#import <sqlite3.h>
#import "Person.h"@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextField *textCodeId;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];[self performSelectorOnMainThread:@selector(selectLocalId:) withObject:nil waitUntilDone:NO];
}- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.
}
-(void)successDoAction:(NSDictionary*) dict{NSLog(@"%@",dict);NSLog(@"网址为");NSDictionary *dictItem =[dict valueForKey:@"Code"];NSLog(@"%@:", [dictItem valueForKey:@"addvalue"] );if([[dict valueForKey:@"respState"] isEqualToString:@"00"]){//        NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(createLocalId:) object:[dictItem valueForKey:@"addvalue"]];
//        [thread setName:@"post新的线程"];
//        [thread start];[self performSelectorOnMainThread:@selector(createLocalId:) withObject:[dictItem valueForKey:@"addvalue"] waitUntilDone:NO];}else{//            提示框UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"激活失败" message:[dict valueForKey:@"respMessage"] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];[alert show];return;}
}
-(void)postHttp:(NSArray*) codeId{//对请求路径的说明//http://120.25.226.186:32812/login//协议头+主机地址+接口名称//协议头(http://)+主机地址(120.25.226.186:32812)+接口名称(login)//POST请求需要修改请求方法为POST,并把参数转换为二进制数据设置为请求体//1.创建会话对象NSURLSession *session = [NSURLSession sharedSession];//2.确立请求路径NSURL *url = [NSURL URLWithString:@"你自己的服务接口"];//3.创建可变的请求对象NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];//4.修改请求方法为POSTrequest.HTTPMethod = @"POST";NSString *data =[[NSString alloc] initWithFormat:@"code=%@&type=JSON", codeId ];NSLog(@"___________参数%@",data);//5.设置请求体request.HTTPBody = [data dataUsingEncoding:NSUTF8StringEncoding];//6.根据会话对象创建一个Task(发送请求)/*第一个参数:请求对象第二个参数:completionHandler回调(请求完成【成功|失败】的回调)data:响应体信息(期望的数据)response:响应头信息,主要是对服务器端的描述error:错误信息,如果请求失败,则error有值*/NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {if(!error){//8.解析数据NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];//            NSLog(@"%@",dict);[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:0]];[self performSelectorOnMainThread:@selector(successDoAction:) withObject:dict waitUntilDone:NO];}else{UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Information" message:@"请求失败" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];[alert show];}}];//7.执行任务[dataTask resume];
}
-(IBAction)getAction:(id)obj{//    [_textCodeId resignFirstResponder];NSString *codeId = self.textCodeId.text;NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(postHttp:) object:codeId];[thread setName:@"post新的线程"];[thread start];
};-(void)createLocalId:(NSString*) arg{//1. 打开(建立)数据库NSLog(@"---------------------------------开始链接数据库-----------------------------------");NSString *cacheDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];NSString *filename = [cacheDir stringByAppendingPathComponent:@"test.sqlite"];sqlite3 * db = nil;NSLog(@"---------------------------------链接开始-----------------------------------");//0表示成功,1表示失败sqlite3_open(filename.UTF8String, &db);if (!db) {NSLog(@"---------------------------------数据库打开失败,建立失败---------------------------------");return;}NSLog(@"---------------------------------链接完成------------------------------------");char *errmsg = nil;//2.一般用来执行无返回结果的sql 命令,(可以执行任何SQL语句)//创建数据库char * createTableSql = "create table if not exists t_person(id integer primary key,name text not null unique,age integer);";int rs = sqlite3_exec(db, createTableSql, NULL, NULL, &errmsg);if (errmsg) {NSLog(@"---------------------------------创建失败---------------------------------");NSLog(@"%s--errorCode:%d",errmsg,rs);}NSLog(@"---------------------------------开始插入数据------------------------------------");//3.插入数据NSString *insertSql = [NSString stringWithFormat:@"insert into t_person(name,age) values('%@',%d);",arg,arc4random()%100+10];char *errmsg1 = nil;sqlite3_exec(db, insertSql.UTF8String, NULL, NULL, &errmsg);if (errmsg1) {NSLog(@"---------------------------------插入失败---------------------------------");NSLog(@"insert error:%s",errmsg);}else{UIStoryboard *story = [UIStoryboard storyboardWithName:@"Main"bundle:nil];ViewHomePageController *storVC = [story instantiateViewControllerWithIdentifier:@"Home"];//    [self.navigationController pushViewController:storVC animated:YES];//带返回按钮[self presentViewController:storVC animated:YES completion:^{}];}
}
-(void)selectLocalId:(id) arg{//1. 打开(建立)数据库NSLog(@"---------------------------------开始链接数据库-----------------------------------");NSString *cacheDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];NSString *filename = [cacheDir stringByAppendingPathComponent:@"test.sqlite"];sqlite3 * db = nil;NSLog(@"---------------------------------链接开始-----------------------------------");//0表示成功,1表示失败sqlite3_open(filename.UTF8String, &db);NSLog(@"---------------------------------开始查询数据------------------------------------");//4.查询数据 尽量使用const char * 不要用NSString ,容易出错const char* selectSql =  "select * from t_person";sqlite3_stmt * stmt = nil;sqlite3_prepare(db, selectSql, (int)strlen(selectSql), &stmt, NULL);if (stmt) {while (sqlite3_step(stmt) == SQLITE_ROW) {Person *person = [[Person alloc]init];person.id =  sqlite3_column_int(stmt, 0);person.name = [NSString stringWithUTF8String:(char *)sqlite3_column_text(stmt, 1)];person.age = sqlite3_column_int(stmt, 2);NSLog(@"---------------------------------查询结果---------------------------------");NSLog(@"%@",person);}UIStoryboard *story = [UIStoryboard storyboardWithName:@"Main"bundle:nil];ViewHomePageController *storVC = [story instantiateViewControllerWithIdentifier:@"Home"];//    [self.navigationController pushViewController:storVC animated:YES];//带返回按钮
//            [self presentModalViewController:storVC animated:YES];[self presentViewController:storVC animated:YES completion:^{}];}else{UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"当前软件未激活:" message:@"请填写激活码" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];[alert show];}
};@end

ViewHomePageController.h

#ifndef ViewHomePageController_h
#define ViewHomePageController_h#endif /* ViewHomePageController_h */
#import <UIKit/UIKit.h>@interface ViewHomePageController : UIViewController
{UIWebView *webView;
}
@end

ViewHomePageController.m


#import <Foundation/Foundation.h>
#import "ViewHomePageController.h"
#import <sqlite3.h>
#import "Person.h"@interface ViewHomePageController ()
@end@implementation ViewHomePageController
- (void)viewDidLoad
{[super viewDidLoad];NSString *url = nil;url = [self selectLocalId];webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height)];webView.scalesPageToFit = YES; // 自动对页面进行缩放以适应屏幕NSURLRequest *request =[NSURLRequest requestWithURL:[NSURL URLWithString:url]];[self.view addSubview: webView];[webView loadRequest:request];
};
-(NSString*)selectLocalId{//1. 打开(建立)数据库NSLog(@"++++++++++++++++++++++++++++++++++开始链接数据库+++++++++++++++++++++++++++");NSString *cacheDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];NSString *filename = [cacheDir stringByAppendingPathComponent:@"test.sqlite"];sqlite3 * db = nil;NSLog(@"+++++++++++++++++++++++链接开始+++++++++++++++++++++++++++");//0表示成功,1表示失败sqlite3_open(filename.UTF8String, &db);NSLog(@"++++++++++++++++++++++++++++开始查询数据++++++++++++++++++++");//4.查询数据 尽量使用const char * 不要用NSString ,容易出错const char* selectSql =  "select * from t_person";sqlite3_stmt * stmt = nil;sqlite3_prepare(db, selectSql, (int)strlen(selectSql), &stmt, NULL);NSString *indexUrl = @"";if (stmt) {while (sqlite3_step(stmt) == SQLITE_ROW) {Person *person = [[Person alloc]init];person.id =  sqlite3_column_int(stmt, 0);person.name = [NSString stringWithUTF8String:(char *)sqlite3_column_text(stmt, 1)];person.age = sqlite3_column_int(stmt, 2);NSLog(@"+++++++++++++++++++查询结果++++++++++++++++++++++");NSLog(@"%@",person);indexUrl = person.name;}
//        UIStoryboard *story = [UIStoryboard storyboardWithName:@"Main"bundle:nil];
//        ViewHomePageController *storVC = [story instantiateViewControllerWithIdentifier:@"Home"];
//        //    [self.navigationController pushViewController:storVC animated:YES];//带返回按钮
//        [self presentModalViewController:storVC animated:YES];}
return indexUrl;
};
@end

Person.h

#ifndef Person_h
#define Person_h#endif /* Person_h */#import <Foundation/Foundation.h>@interface Person : NSObject<NSCoding>
@property (nonatomic ,assign)int id;
@property (nonatomic ,copy) NSString *name;
@property (nonatomic ,assign)int age;
@end

Person.m

#import <Foundation/Foundation.h>
#import "Person.h"@implementation Person
-(NSString *)description{return [NSString stringWithFormat:@"id:%d--name:%@--age:%d",self.id,self.name,self.age];
}
-(instancetype)initWithCoder:(NSCoder *)decoder{if (self = [super init]) {self.id = [decoder decodeIntForKey:@"id"];self.name = [decoder decodeObjectForKey:@"name"];self.age = [decoder decodeIntForKey:@"age"];}return self;
}
-(void)encodeWithCoder:(NSCoder *)encoder{[encoder encodeInt:self.idforKey:@"id"];[encoder encodeObject:self.name forKey:@"name"];[encoder encodeInt:self.age forKey:@"age"];
}
@end

没什么难的,就这么简单,原理就是一个请求,一个跳转,一个webview,代码过于简单仅供参考

IOS 简单粗暴的方式 实现H5App相关推荐

  1. 简单粗暴的方式解决eclipse下安装STS失败的问题

    简单粗暴的方式解决eclipse下安装STS失败的问题 参考文章: (1)简单粗暴的方式解决eclipse下安装STS失败的问题 (2)https://www.cnblogs.com/zhangyua ...

  2. 【经验心得】固定布局做到各手机屏幕适配简单粗暴的方法

    1.viewport 简单粗暴的方式: <meta name="viewport" content="width=320,maximum-scale=1.3,use ...

  3. 如何简单粗暴的提升NER效果?一文告诉你如何用词库来做NER数据增强

    每天给你送来NLP技术干货! 来自:船长尼莫 点击这里进群->加入NLP交流群 在NLP的基础任务中,NER无疑很难做,但是做好了,会提升下游的很多效果.那么如何提升NER的效果呢?数据增强无疑 ...

  4. 不要驱动,简单粗暴的用树莓派驱动USB打印机

    不要驱动,简单粗暴的用树莓派驱动USB打印机 admin 2015年4月14日   5 Comments 网上很多文章都是再说如何用树莓派来做一个通用打印服务器,但是在很多应用场景下,配置CUPS什么 ...

  5. iOS打包成 ipa包(简单粗暴方法)

    按照下面的步骤走,就可以打包成功,我不说各种原因,只讲操作步骤: 简单粗暴!!! 首先你得有一个苹果开发者账号.要是没有,就自己申请一个. 注意:在创建app IDs 还有描述文件的时候,需要添加的是 ...

  6. Mogrt教程 简单粗暴的PR动态图形模板Mogrt替换logo方式

    很多用户反馈Mogrt文件需要用AE打开替换图片才能使用,"这根本就是AE模板",体验太差了! 这确实是个问题,我们也希望Adobe官方可以更新下.mogrt可以在PR软件中直接替 ...

  7. iOS APP:简单粗暴的自制下拉刷新

    先对页面设置一个BOOL类型的stopRefresh 属性.(@property ) 初始化:_stopRefresh = NO; 然后:在scrollViewDidScroll里面实现:(注意要先实 ...

  8. 如何实现简单粗暴靠谱的直播抓娃娃方案

    市面上的娃娃机方案五花八门,daniulive认为最简单靠谱粗暴性价比的方案如下: RTMP摄像机-->CDN-->daniulive player(专门针对直播娃娃机开通了"超 ...

  9. 简单粗暴上手TensorFlow 2.0,北大学霸力作,必须人手一册!

    (图片付费下载自视觉中国) 整理 | 夕颜 出品 | AI科技大本营(ID:rgznai100) [导读] TensorFlow 2.0 于近期正式发布后,立即受到学术界与科研界的广泛关注与好评.此前 ...

最新文章

  1. Linux下Shell重定向
  2. 【组队学习】【28期】基于Python的会员数据化运营
  3. 量子态太「脆弱」如何纠错?MIT教授Peter Shor多年研究得到验证
  4. Symfony2CookBook:如何创建自定义的表单域类型
  5. 寒假每日一题(入门组)【week5 完结】
  6. etcd集群部署与遇到的坑
  7. 前端 HTML 常用标签 head标签相关内容 script标签
  8. Wireshark工作笔记-对TCP连接与断开以及数据传输的实战分析
  9. java的可变参数介绍_Java基础 可变参数介绍(转载)
  10. ora-28547 可能是oracle net 管理错误_PostgreSQL与Oracle:成本、易用性和功能上的差异...
  11. pymysql操作数据库
  12. 用 Lucene 构建文档数据库
  13. 计算机网络网络应用之P2P应用
  14. UNIX网络编程卷一 学习笔记 第一章 简介
  15. Android 下拉刷新控件
  16. OpenGL着色器程序解析--点光源
  17. Python开发系列课程(14) - 玩转正则表达式
  18. php使用二进制判断图片(或文件)真实类型(可判断远程图片)
  19. 常见的计算机专业词汇
  20. 树莓派python物体识别_基于树莓派和Tensowflow的物体识别

热门文章

  1. Latex语法学习04:参考文献的引用
  2. Spring AOP 切面(Aspect)应用详解
  3. 双向数据绑定原理(Vue)
  4. 表情检测:pyimage
  5. pb系统的twap交易指令_几家大的券商的PB系统以及算法交易概况大致是怎样的?...
  6. linux tcp bind 失败,【技术分享】开发Linux上带有基本认证的TCP Bind Shell
  7. c#如何集成控制Led屏,实现数据发送自动开机、关机等操作!
  8. 人生模拟器(伪) 有源码 有图 这是一个简单的C语言小游戏了 Visual Studio 2019就可运行
  9. 深入探究指针及指针类型
  10. 产业区块链一周动态丨信用债市场血雨腥风,区块链能够有哪些作为?