WKWebView 基本使用及与JS交互,以及低版本系统崩溃问题解决

前言 工作中,重构了一个简单的WKWebView页面,页面底部要拼接原生UItableView,所以就写一写,遇到的问题总结。 使用 参考资料 OC与JS交互之WKWebView 参考 导入文件 #import <WebKit/WebKit.h> 协议 < UIScrollViewDelegate, WKUIDelegate, WKNavigationDelegate, WKScriptMessageHandler > 单例 /** WKWebView 单例*/ - (WKWebView*)WebView{ if (!_WebView) { //js配置 WKWebViewConfiguration *config = [WKWebViewConfiguration new]; WKUserContentController* userContentController = [WKUserContentController new]; [userContentController addScriptMessageHandler:self name:@"showName"]; config.userContentController = userContentController; //单例……

阅读全文

Tumblr 爬虫

<version>0.5.2</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> ## process package win.raychow.modules.spider.base.processor; import com.alibaba.fastjson.JSON; import org.json.XML; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import us.codecraft.webmagic.Page; import us.codecraft.webmagic.Site; import us.codecraft.webmagic.Spider; import us.codecraft.webmagic.processor.PageProcessor; import win.raychow.core.base.dao.CacheKey; import win.raychow.core.base.service.HtmlTool; import win.raychow.demo.spider.tool.SslDownloader; import win.raychow.modules.spider.base.dao.SpiderTumblr; import win.raychow.modules.spider.base.domain.TumblrRecModel; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** Created by ray on 2017/11/19. */ @Service public class TumblrProcessor implements PageProcessor { private Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired TumblrPipeLine pipeLine; @Value("${spider.tumblr.prefixSexList}") private String prefixSexList; @Value("${spider.tumblr.prefixAnimalList}") private String prefixAnimalList; public final static String bashUrl = ".tumblr.com/api/read?type=video&num=20&start="; private String getCategory(String url){ //性 String[] sexList = prefixSexList.split(CacheKey.Split); for (String id: sexList) { if (url.contains(id)){ return SpiderTumblr.Category_AV; } } //动物 String[] animalList = prefixAnimalList.split(CacheKey.Split); for (String id: animalList) { if (url.contains(id)){ return SpiderTumblr.Category_Animal; } } return SpiderTumblr.Category_Null; } @Override public Site getSite() { //HttpHost httpHost = new……

阅读全文

HTTPS连接过程及证书自定义认证

前言 本文主要是为了afnetworking下配置https证书验证。 最近公司另一个APP要做SSL自定义验证,参考了另一个APP已由其他同事写好的代码,顺便总结一下相关知识。 参考1:http://blog.csdn.net/dr19901106/article/details/5……

阅读全文

bilibili 爬虫

前言 上次写到niconico爬虫,今天上一个bilibili爬虫,使用的依然是webmagic. webmagic简介地址(请点击) 注意 常规网页展示部分一般分为列表页和详情页,bilibili站是请求后台api返回json,然后使用js生成网页,所有主要设计解析方法为,json解析……

阅读全文

浅谈ReactCocoa与MVVN,MVC关系,及基本使用

简介 RAC全程ReactiveCocoa,是由Github开源的一个应用于iOS和OS开发的新框架。RAC结合了函数式编程(Functional Programming)和响应式编程(Reactive Programming),其中的函数式编程一直比较难以理解,最近在使用链式调用的过……

阅读全文

niconico 爬虫

<version>0.5.2</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> ## process /** Created by ray on 2017/7/16. 爬虫管道 */ @Service public class NicoNicoProcessor implements PageProcessor { private Logger logger = LoggerFactory.getLogger(this.getClass()); //https://api.bilibili.com/archive_rank/getarchiverankbypartion?type=jsonp&tid=20&pn=1 private String bashUrl = “http://www.nicovideo.jp/tag/%E8%B8%8A%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F?page=" ;// + i //http://www.nicovideo.jp/watch/sm23385186 private String detailUrl = “http://www.nicovideo.jp/watch/"; @Value("${spider.niconico.maxSize}”) int maxSize; @Autowired NicoNicoPipeLine pipeLine; @Override public Site getSite() { //HttpHost httpHost = new HttpHost("127.0.0.1",1087); Site site = Site.me() //.setHttpProxy(httpHost) .setUserAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36") .setSleepTime(10 * 1000) .setTimeOut(20 * 1000) .setRetryTimes(3) .setCycleRetryTimes(3); return site; } @Override public void process(Page page){ String pageUrl = page.getUrl().toString(); //新增请求列表 List<String> requestUrls =new ArrayList<>(); List<SpiderNico> resList = new ArrayList<>(); logger.info(pageUrl); try { if (pageUrl.contains(bashUrl)){ //解析列表 List <String> htmlList = page.getHtml().xpath("//div/ul[@class='list']/li[@class='item']").all(); for (String tmp: htmlList) { if (tmp.length()……

阅读全文

block OC 用法

block OC 用法 函数指针 ex1: typedef int(^func_aaa)(id parameter); - (void)testFunc{ func_aaa test; test = ^(NSNumber* qq){ PKLog(@"val: %@",qq); return 456; }; int a = test([NSNumber numberWithInt:123]); PKLog(@"%d",a); } ex1_log: 2016-04-07 17:00:19.028 djcars[5566:210891] 123 2016-04-07 17:00:25.356 djcars[5566:210891] val: 123 2016-04-07 17:00:28.326 djcars[5566:210891] 456 ex2 (在循环内使用Block,block会引用循环体内的值) typedef int(^func_aaa)(id parameter); - (void)testFunc{ NSMutableDictionary *mulAry = [[NSMutableDictionary alloc]init]; for (int i = 0 ; i < 10; i++) { func_aaa test; test = ^(NSNumber* qq){ PKLog(@"val: %@",qq); return i+10; }; [mulAry setObject:test forKey:[NSString stringWithFormat:@"keyNo_is%d",i]]; } PKLog(@"%@",mulAry); NSInteger i = 0; for (func_aaa obj in [mulAry allValues]) { int v = obj([NSNumber numberWithInteger:i++]); PKLog(@"%d",v); } } ex2_log: 2016-04-08 10:36:46.129 djcars[2958:46438] val: 0 2016-04-08 10:36:46.129……

阅读全文

使用Jenkins备份Mysql

MYSQL自动备份脚本 #! / bin/sh #用户名 mysql_user=user #密码 mysql_password=password #数据库地址 mysql_host=192.168.199.182 #库名 mysql_dataBase=springboot #备份路径 mysql_backPath=/mnt/sda1/mysql_bak/ #备份时间 time=$(date +%Y%m%d%H%M%S) #创建目录 mkdir $mysql_backPath || true #移除5天前备份数据 find $mysql_backPath -mtime +5 -name "*.*" -exec rm -rf {} \; #到处sql文件 mysqldump --opt -h$mysql_host -u$mysql_user -p$mysql_password $mysql_dataBase>$mysql_backPath$mysql_dataBase$time.sql Jenkins配置 备注:注意时区。。。……

阅读全文

React Native 初步理解和使用

参考demo 中国版 github 地址 参考资料 搭建开发环境 进阶之原生混合与数据通信开发详解 参考 REACT NATIVE(JS/ES)与IOS(OBJECT-C)交互通信 参考 React Native 中组件的生命周期 idea配置 file->import settings->(选jar包) React Native 插件jar 环境搭建 Ios 这个没啥特别 暂时未补全 android 真机调试有……

阅读全文

category 动态增加属性

起因 抽风查看以前的代码!!查看一个红点的库!查着查着就想补充一下分类里添加属性的方法!!重温runtime的一些使用! category里面的分类属性是不带 setter/getter ,而普通类里面是已经带 setter/getter; 动态添加属性 写法1 @property (nonatomic, assign) BOOL isNotIgnore; //runtime 动态绑定 属性 - (BOOL)isNotIgnore{ //_cmd == @select(isIgnore); 和set方法里一致 return [objc_getAssociatedObject(self, _cmd) boolValue]; } - (void)setIsNotIgnore:(BOOL)isNotIgnore{ // 注意BOOL类……

阅读全文