nslog

iOS下JS与原生的交互一

让人想犯罪 __ 提交于 2020-03-11 12:21:04
本篇主要讲的是UIWebView和JS的交互,在下一节会有wkWebView和JS交互的详解https://www.cnblogs.com/llhlj/p/9144110.html JS调用原生OC 方式一:url拦截,这里略过 注意:在iOS中拦截到的url scheme将全部转化为小写; html中需要设置编码,否则中文参数可能会出现编码问题; JS用打开一个iFrame的方式替代直接用document.location的方式,document.location 有一个很严重的问题,就是如果我们连续 2 次改 document.location 的话,在 delegate 方法中,只能截获后面那次请求,前一次请求由于很快被替换掉,所以被忽略掉。 方式二:通过JavaScriptCore(iOS 7之后),用来做JS交互,因此JS与原生OC交互也变得简单了许多。 //获取js上下文,及本地添加js调用方法,一般情况下都放在-(void)webViewDidFinishLoad:(UIWebView *)webView方法里。 -(void)webViewDidFinishLoad:(UIWebView *)webView{ //获取js上下文 self.jscontext = [webView valueForKeyPath:@"documentView.webView

OC - 时间日期类NSDate

邮差的信 提交于 2020-03-11 07:50:22
OC - 时间日期类NSDate //NSDate 时间日期类 NSDate 二进制数据流 { //1.获取当前时间 零时区的时间 //显示的是格林尼治的时间: 年-月-日 时:分:秒:+时区 NSDate *date = [NSDate date]; NSLog(@"当前零时区时间 %@", date); //2.获得本地时间 东八区 晚八个小时 以秒计时 NSDate *date1 = [NSDate dateWithTimeIntervalSinceNow:8 * 60 * 60]; NSLog(@"今天此时的时间 %@",date1); //3.昨天此时的时间 NSDate *yesterdayDate = [NSDate dateWithTimeIntervalSinceNow:(-24 + 8) * 60 * 60]; NSLog(@"昨天此时的时间 %@",yesterdayDate); //4.明天此刻 NSDate *tomorrowDate = [NSDate dateWithTimeInterval:24 * 60 * 60 sinceDate:date1]; NSLog(@"明天此刻的时间 %@",tomorrowDate);                //n天此刻     NSDate *tomorrowDate7 = [NSDate

《iOS简单网络传输》iOS7 CookBook系列

回眸只為那壹抹淺笑 提交于 2020-03-08 14:40:27
如何利用 NSURLConnection 来获得网络资源? 引用书中的话 “ 有使用NSURLConnection的两个方法。一个是异步的,而另一个是同步的。异步连接将创建一个新的线程并执行其下载过程在新线程。一个同步连接将阻塞调用线程且同时下载的内容。 许多开发者认为,一个同步连接阻塞主线程,但是这是不正确的。一个同步连接将始终阻止它被启动的线程。如果你从主线程的启动同步连接,是的,主线程将被阻塞。但是,如果你从一个线程在主线程之外启动同步连接,它会像一个异步连接,它不会阻止你的主线程。 实际上,同步和异步连接之间的唯一区别在于,运行时< runtime >将为异步连接创建一个线程,而它不会对一个同步连接这样做。 ” 异步连接的过程: 为了创建一个异步连接,我们需要做到以下几点:1。在NSString的实例URL 2。我们的字符串转换为NSURL的一个实例。 NSString * urlAsString = @" http://www.apple.com " ; NSURL * url = [ NSURL URLWithString : urlAsString ]; 3.我们可以创建一个异步的URL连接 NSURLRequest * urlRequest = [ NSURLRequest requestWithURL : url ]; 4.创建一个操作队列

iOS定位--CoreLocation框架

家住魔仙堡 提交于 2020-03-07 07:43:46
CoreLocation框架的使用 // 首先导入头文件 #import <CoreLocation/CoreLocation.h> CoreLocation框架中所有数据类型的前缀都是CL CoreLocation中使用CLLocationManager对象来做用户定位 1.CLLocationManager的使用 CLLocationManager的常用操作 /** * 定位管理者,全局变量强引用,防止销毁 */ @property (nonatomic ,strong) CLLocationManager *mgr; 设代理 // 2.成为CoreLocation管理者的代理监听获取到的位置 self.mgr.delegate = self; ①得到用户授权 注意: iOS7只要开始定位, 系统就会自动要求用户对你的应用程序授权. 但是从iOS8开始, 想要定位必须先"自己""主动"要求用户授权 添加友好提示,在info.plist文件中添加字段 Privacy - Location Usage Description 在iOS8中不仅仅要主动请求授权,而且必须再info.plist文件中配置一项属性才能弹出授权窗口 NSLocationWhenInUseDescription,允许在前台获取GPS的描述 NSLocationAlwaysUsageDescription

iOS地图 -- 定位初使用

五迷三道 提交于 2020-03-07 07:37:23
iOS的定位服务用到的框架是 #import <CoreLocation/CoreLocation.h> 定位中用到的类是 CLLocationManager 一.iOS8.0之前的定位 向用户描述授权的信息需要在info.plist中配以下key 后台情况下开启定位服务需要进行如下图配置 二.iOS8.0之后的定位(包含iOS8.0) iOS8.0之后前台定位授权和后台定位授权需要调用下面对应的方法 // 前台定位授权 官方文档中说明info.plist中必须有NSLocationWhenInUseUsageDescription键 [_mgr requestWhenInUseAuthorization]; 或者 // 前后台定位授权 官方文档中说明info.plist中必须有NSLocationAlwaysUsageDescription键 [_mgr requestAlwaysAuthorization]; 三.版本不同的适配问题(两种方法) 方法一: // 方法一:判断iOS版本号 if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) { // 前台定位授权 官方文档中说明info.plist中必须有NSLocationWhenInUseUsageDescription键 [_mgr

iOS定位开发之CoreLocation

ⅰ亾dé卋堺 提交于 2020-03-07 07:35:42
有时候我们并不需要查看地图,而仅仅需要自己的当前位置就可以,这时候就没有必要去使用MapKit可,直接使用定位服务就好了 苹果提供了CoreLocation框架来做定位功能 首先要想项目中导入CoreLocation框架 定位服务开启之前最好查看一下定位服务是否可用,有可能用户已经拒绝或者用户手机定位模块有问题,无法定位 定位服务是由CLLocationManager来管理的 定位成功等信息也是通过代理发送给对象的,另外定位中经常需要用到地理位置的解码和反解码(其实就是经纬度和地名之间的转换) 下面的范例代码有基本的使用方式和注意点 #import "ViewController.h" #import <CoreLocation/CoreLocation.h> @interface ViewController () <CLLocationManagerDelegate> { // 定位服务管理器 CLLocationManager *_locationManager; // 使用地理编码器 CLGeocoder *_geocoder; } @end @implementation ViewController /** 1. 在开发LBS类的应用时,获取用户定位信息之前,一定要判断一下定位服务是否允许 + locationServicesEnabled 2. 开启定位

IOS编程思想的概念

╄→尐↘猪︶ㄣ 提交于 2020-03-05 15:18:20
iOS几大编程思想 面向对象思想:万物皆对象,做一件事情的过程转变为对象处理事件的过程。 链式编程思想:将多个操作通过点(.)链接在一起成为一句代码,使得代码更好阅读。例如p.add(1).add(2)。特别的地方在于每个方法返回一个block,这个block的返回值又是这个对象本身,block的参数需要自己考虑实际情况。这里在多讲一下,为什么add后面要加括号,还有参数。其实这个就是调用了这个block(block的调用就是括号,里面添加参数).其代表最出名的第三方框架是Masonry。不懂的可以去看看,这里不贴代码。 响应式编程思想:不需要考虑调用顺序,只需要知道结果。产生一个事件,会影响很多东西,这些事件像流一样传播出去,然后作用,最后产生结果。借用面向对象的一句话,万物皆是流。其代表是KVO。 函数式编程思想:函数调用其他函数作为参数。其代表是ReactiveCocoa。 这里写几个常用的ReactiveCocoa用法,语法主要为了高内聚低耦合。像btn的点击事件,textfiled的文字改变事件,或者通知,代理等等。 // 1.代替代理 // 需求:自定义redView,监听红色view中按钮点击 // 之前都是需要通过代理监听,给红色View添加一个代理属性,点击按钮的时候,通知代理做事情 // rac_signalForSelector

iOS 。开发之指纹识别功能

别来无恙 提交于 2020-03-05 06:53:35
// 头文件导入 #import <LocalAuthentication/LocalAuthentication.h> //在iPhone5s的时候,苹果推出了指纹解锁。但是在ios8.0的时候苹果才推出相关的接口。所以, /** * 第一步,验证版本 */ if ([UIDevice currentDevice].systemVersion.floatValue < 8.0) { return nil; } /** * 第二步,创建LAContext */ LAContext *ctx = [[LAContext alloc] init]; NSError *error; //判断设备是否支持指纹识别 if ([ctx canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) { NSLog(@"请按手指"); //输入指纹 [ctx evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"提示文字" reply:^(BOOL success, NSError * _Nullable error) { if (success) { NSLog(@"验证成功");

iOS NSThread、NSOperation与GCD

对着背影说爱祢 提交于 2020-03-02 11:43:34
一、NSThread线程 优点: NSThread 比其他两个轻量级、使用方便、简洁。 缺点: ①需要自己管理线程的生命周期。 ②线程同步,线程同步对数据的加锁会有一定的系统开销 NSThread线程的使用: 启动一个线程 NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(myThreadTask) object:nil]; thread.name=@"sum"; [thread start] 停止线程 [thread cancel]; thread = nil; 注意:停止线程的并不是直接杀死线程,而是设置了个标记 -(void) myThreadTask{ @autoreleasepool { NSLog(@"Thread Entry Point"); while ([[NSThread currentThread] isCancelled] == NO){ [NSThread sleepForTimeInterval:10]; NSLog(@"Thread Loop"); } NSLog(@"Thread Finished"); } } 还有一类用法如下: [NSThread detachNewThreadSelector:@selector(bigDemo)

objective-c 定位导航

此生再无相见时 提交于 2020-03-01 13:07:52
ViewController.m 文件 #import "ViewController.h" // 引入核心定位 #import <CoreLocation/CoreLocation.h> // 地图 #import <MapKit/MapKit.h> // 引入大头针 #import "Annotation.h" //NSLocationWhenInUseUsageDescription-->YES (当使用) //NSLocationAlwaysUseUsageDescription-->YES (一直) @interface ViewController ()< CLLocationManagerDelegate , MKMapViewDelegate > { // 创建管理者 CLLocationManager * locationManager; // 定义地图 MKMapView * mapViewWO; UITextView * textview; // 创建地理编码对象 CLGeocoder * geoCoder; } @end @implementation ViewController - ( void )viewDidLoad { [ super viewDidLoad ]; [ self layout ]; geoCoder =[ CLGeocoder