wcgworkingrecord
将用户登录请求替换
将微信验证请求替换
将上传手机信息请求替换
将获取验证码请求信息替换
将注册的请求方式替换
将获取首页配置的请求方式替换
将更新主页状态的请求方式替换
将获取首页轮播图的请求方式替换
将获取首页角标信息的请求方式替换
将APPICON的角标替换
将忘记密码的请求进行替换
将月度账单的请求方式替换
将修改昵称、用户名的请求方式替换
将绑定手机号的请求方式替换
将城市照明详情的请求方式替换
将城市照明列表的请求方式替换
将城市照明上报功能涉及到上传图片 暂时不替换
将城市照明扫码功能的请求方式替换
将城市照明案卷评价功能的请求方式替换
将公共自行车选择类型的请求方式替换
将公共自行车绑定身份证号的请求方式替换
将公共自行车解绑的请求方式进行替换
将公共自行车上传自行车的token进行替换
垃圾上报 未找到使用地方、涉及到视频的上传
专题上报 涉及到图片的上传
判断唯一提交码 未使用
城市提交涉及到图片的上传
城市大小类 未使用
将新闻列表的请求方式替换
将智慧环卫的工作动态请求方式替换
将智慧环卫的绿色家园请求方式替换
将智慧环卫的新闻咨询请求方式替换
将垃圾分类的药品回收请求方式替换
将垃圾分类的试点小区请求方式替换
iOS自动化打包
Fastlane 是一款为iOS和Android开发者提供的自动化构建工具,他可以帮助开发者将App打包、签名、测试、发布、信息整理、提交Appstore等工作完整的连接起来,实现完全自动化的工作流,使用得当,会显著的提高开发者的效率。安装过程如下:
//*安装fastlane的命令
$ sudo gem install fastlane -n /usr/local/bin
//*检测是否安装成功
$ fastlane –version
//*切换到工程目录下之后进行初始化
$ fastlane -init
//*上传到Fir.im需要安装的两个插件
$ fastlane add_plugin versioning
$ fastlane add_plugin firim
//*在生成的Fastfile文件中添加如下代码
desc “archive ipa”
lane :archive do
#打包的ipa存放路径
outputDir = “~/firim/ipa/#{Time.now.strftime(‘%y%m%d’)}”
#打包的ipa名称
outputName = “MOFSPickerManager-#{Time.now.strftime(“%Y-%m-%d %H:%M:%S”)}”
gym(
scheme: “MOFSPickerManagerDemo”, #改为你项目的scheme
#workspace: “DFKJ.xcworkspace”, #如果项目使用CocoaPods需要加上
configuration: “Release”,
output_directory: outputDir,
output_name: outputName,
include_bitcode: false,
include_symbols: true,
codesigning_identity: ENV[“CODESIGNING_IDENTITY_TO_FIRIM”],
silent: true,
export_options: {
method: “development”, #根据具体情况定
thinning: “
}
)
firim(firim_api_token: “你的firim的token”) #上传到firim
end
//**执行打包上传的命令
$ fastlane archive
tableview抖动
我在iOS开发中碰到的一些坑
问题记录 编写了一个可折叠的tableviewCell 但是后来发现展开或者收起的时候会发生抖动的问题,怅恨久之,终有良策。
解决方案 iOS11后系统默认开启Self-Sizing,包括Headers和Footers,如果项目中没有使用estimatedRowHeight iOS11下会有奇怪的问题。所以在Tableview初始化的地方加入下面的代码
self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
self.tableView.estimatedSectionFooterHeight = 0;
问题记录 iOS10添加了隐私权限提示,但是当我们拒绝开启权限后,再次调用就会出现崩溃的问题,为了避免这个问题,我们可以在调用设备前判断是否开启了调用权限。
解决方案 调用设备前判断是否开启了调用权限。
cellForRowAtIndexPath 和 heightForRowAtIndexPath 谁先调用,谁后调用?
如果你的tableview设置了预估的行高
cellForRowAtIndexPath 在 heightForRowAtIndexPath 之前
如果你的tableview没有设置预估的行高
tableView首先会把所有IndexPath的heightForRowAtIndexPath轮训一遍以计算contentSize。而后按照情况1的顺序。
智慧城管
智慧城管登录页面分析
ZHHomeViewController 移动OA
HZLDJGIndexViewController 领导监管
NeiWangMenHuViewController 内网门户
HZYeWuChaXunViewController 业务查询
BSSelfInfoViewController 系统设置
UINavigationController以栈的形式保存子控制器,使用push方法能将某个控制器压入栈,使用pop方法可以移除栈顶控制器。
应用首先启动进入登录界面BSLoginViewController,登录成功则进入主界面。
此应用将UIWindow的rootViewController设置为一个UITabBarController,然后在UITabBarController中嵌入了5个UINavigationController,每个UINavigationController又嵌入了若干个UIViewController.
HZDaiBanViewController 待办事项
HZDaiYueViewController 待阅公文
HZReceiveFileViewController 收文管理
HZSendFilesViewController 发文管理
HZMailBoxViewController 办公邮件
HZNotificationViewController 会议管理
HZAnnounceViewController 办件通知
HZInformationViewController 公告通知
HZLatestFileViewController 最新文件
HZAddressListViewController 通讯录
HZAssessViewController 考核通报
HZTotalMeetingViewController 所有会议
HZLatestKanWuViewController 最新刊物
HZSJJYKWViewController 市级简报刊物
HZNBXXViewController 内部信息
HZZFXNGKViewController 作风能效公开
HZYeWuChaXunViewController 业务查询
HZLDJGIndexViewController 领导监管
WKWebView
此篇笔记主要用来记录WKWebView的学习进展
An object that displays interactive web content, such as for an in-app browser.
进程是计算机科学中最深刻,最成功的概念之一。
在现代系统上运行一个程序时,我们会得到一个假象,就好像我们的程序是系统中当前运行的惟一的程序一样。我们的程序好像是独占地使用处理器和内存。处理器就好像是无间断地一条接一条地执行我们程序中的指令。最后,我们程序中的代码和数据好像是系统内存中唯一的对象。这些假象都是通过进程的概念提供给我们的。
一个独立的逻辑控制流,它提供一个假象,好像我们的程序独占地使用处理器。
一个私有的地址空间,它提供一个假象,好像我们的程序独占地使用内存系统。
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。最初的定义出现于《设计模式》(Addison-Wesley,1994)
生成器模式:将一个复杂对象的构建与它的表现分离,使得同样的构建过程可以创建不同的表现。
抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
工厂方法模式:定义创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到其子类。
原型模式:使用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象。
代理模式:为其他对象提供一种代理以控制对这个对象的访问。
对象创建 接口适配 对象去耦 抽象集合 行为扩展 算法封装 性能与对象访问 对象状态
Standing on Shoulders of Giants 站在巨人的肩膀上
导航栏组件的生命周期和相关的方法的调用顺序。
在导航栏里的 Stack 中,每个 ViewController 都可以永久的影响导航栏样式,这种全局性的变化要求我们在实际开发中必须坚持“谁修改,谁复原”的原则,否则就会造成导航栏状态的混乱。
导航栏的显示与否
导航栏的颜色变化
transparent
translucent
opaque
2019年5月27日 工作日志 微城管
1 将数据发布 从UIWebView切换到WKWebview;
2 将违停查询 从UIWebView切换到WKWebview;
3 将积分规则 从UIWebView切换到WKWebview;
4 将我的积分 从UIWebView切换到WKWebview;
5 将我的消息 从UIWebView切换到WKWebview;
2019年5月28日 工作日志 微城管 上午
6 将每日一题 从UIWebView切换到WKWebview;
7 将每日一题规则 从UIWebView切换到WKWebview;
8 将优秀案卷 从UIWebView切换到WKWebview;
9 将帮助中心 从UIWebView切换到WKWebview;
10 将渣土爆料列表 从UIWebView切换到WKWebview;
11 将工作动态详情 从UIWebView切换到WKWebview;需要处理
12 将垃圾去哪儿 从UIWebView切换到WKWebview;
13 将环卫大数据 从UIWebView切换到WKWebview;
14 将市民热线 从UIWebView切换到WKWebview;
15 将内部应用 从UIWebView切换到WKWebview;
2019年5月28日 工作日志 微城管 下午
1 将数据发布 从UIWebView切换到WKWebview;
2 将违停查询 从UIWebView切换到WKWebview;
15 将内部应用 从UIWebView切换到WKWebview;
8 将优秀案卷 从UIWebView切换到WKWebview;
14 将市民热线 从UIWebView切换到WKWebview;
6 将每日一题 从UIWebView切换到WKWebview;
5 将我的消息 从UIWebView切换到WKWebview;
2019年5月29日 工作日志 微城管
4 将我的积分 从UIWebView切换到WKWebview;
3 将积分规则 从UIWebView切换到WKWebview;
1 删除我的积分
1 删除积分规则
1 删除市民热线
1 删除实时数据发布
1 删除优秀案卷
1 删除内部应用
1 删除每日一题
1 删除每日一题规则
1 删除帮助中心
1 删除垃圾去哪儿
1 删除环卫大数据
1 删除环卫调查
1 删除违停查询
1 删除便民通知
2019年5月30日 工作日志 微城管
1 删除办事大厅
2 删除帮停车
3 删除找找公厕
2019-5-16
the Model-View-Controller (MVC) design pattern
Model objects manage the app’s data and business logic.
View objects provide the visual representation of your data.
Controller objects act as a bridge between your model and view objects, moving data between them at appropriate times.
View hierarchies make it easier to manage views.
You can also use views to do any of the following:
1. Respond to touches and other events (either directly or in coordination with gesture recognizers).
2. Draw custom content using Core Graphics or UIKit classes.
3. Support drag and drop interactions.
4. Respond to focus changes.
5. Animate the size, position, and appearance attributes of the view.
Container Views
Content Views
Creating cells lazily reduces the amount of memory the table uses.
A view controller’s main responsibilities include the following:
Updating the contents of the views, usually in response to changes to the underlying data.
Responding to user interactions with views.
Resizing views and managing the layout of the overall interface.
Coordinating with other objects—including other view controllers—in your app.
对象之间的通信 一般有三种方式 代理、block、通知
方法的内存实在栈区 当使用copy修饰的时候,系统会把改block实现拷贝一份到堆区
传递的时候,对于基本数据类型的外部变量来说,传递的仅仅是值,也就是说这个局部变量是不能被修改的,如果想修改值,会使用__block来修饰这个变量。这样一来,系统在传递的时候,传的就是外部变量的地址,这样我们就可以修改值了。
closure 闭包
闭包就是能够读其他函数内部变量的函数
返回值(^块对象名称)(参数列表类型) = ^(参数列表){块对象中的代码}
存放地址的内存别名就是指针 int *p = &a;
1.反向传值
2.在方法中定义block回调传值
3.做为参数传递
iOS开发之友盟的集成
社会化分享SDK U-Share
消息推送SDK U-Push 当前版本3.2.4
移动统计SDK U-App
成功的实现了一个代理
首先要声明一个协议
@protocol btnClickedDelegate <NSObject>
定义点击事件方法,
-(void)btnClicked
声明一个delegate的变量
@property (nonatomic,weak) id
在cell中的点击事件中调用协议中的方法
[self.btnClickedDelegate btnClicked]
首先将视图设置为代理本身
view.btnClickedDelegate = self
在viewController中实现代理
-(void)btnClicked
故事的开头是这样的:我在写一个项目的过程中自定义了一个View叫做BSPopupView,这个View是一个浮窗,浮窗上面有三行内容,每行内容中呢有一个图标,一行文字和一个点击按钮。当我在对应的ViewController中使用这个自定义的View的时候。我该在哪里处理View中按钮的点击事件呢?很明显的是应该将其放到ViewController中来处理,可是我该怎么做到呢?
我浪迹于各种博客,网站。略模的寻找到了一些线索。大致的方案呢有如下的三种:首先是可以采用发送通知的方式来处理,其次是使用代理的方式来处理,最后是采用Block的方式来处理。这算是给了上、中、下三策啊。可是问题又来了,谁是上策,谁是中策,谁又是下策呢?那我只能挨个儿试试啦。
既然有三种方式可用,那么这三种方式肯定是有各自独特的适用范围和情况的。就通知来说的话,更适用于两个对象没有关系,或者一个对象要和多个对象通信,那么可以采用通知中心。
使用的步骤如下:
1.创建一个通知
NSNotification *notification = [NSNotification notificationWithName:kNotificationWithClickZFBButton object:nil userInfo:nil];
[[NSNotificationCenter defaultCenter] postNotification:notification];
2.在需要处理的地方监听一下
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(kNotificationWithClickZFBButton:) name:kNotificationWithClickZFBButton object:nil];
通知说完说代理 代理的使用步骤如下。
1、第一步可以在BSPopView中声明一个协议,声明的方法如下语句:1
2
3
4
5```
2、第二步,为这个声明的协议添加对应的定义点击事件方法,如下语句:
``` -(void)btnClicked;
3、第三步,在BSPopView的头文件中声明一个delegate的属性,可以采用如下的代码:1
@property (nonatomic,weak) id<btnClickedDelegate>
4、第四步,在BSPopView的实现文件中添加当按钮被点击的时候调用协议中的方法,语句如下1
[self.btnClickedDelegate btnClicked]
5、第五步,此时就可以到对应的ViewController中来实现在BSPopView中定义的代理了
6、第六步,首先需要继承这个代理,代码如下:1
@interface BSStopPayViewController () <UITableViewDelegate, UITableViewDataSource,btnClickedDelegate>
7、第七步,然后将试图的代理设置为controller自己,代码如下1
2BSPopupView *view = [[BSPopupView alloc] init];
view.btnClickedDelegate = self
8、第八步,在viewController中实现在BSpopView中定义的代理方法,代码如下1
2
3 -(void)btnClicked{
NSLog(@"您在BSPopView中定义的代理方法被成功的实现了!");
}
然后可以说说什么情况下使用代理,就是当两个对象有包含关系的时候就可以使用代理了。如果一个对象想让另一个对象干的不只一件事情,那么就使用代理。如果一个对象想让另一个对象干只有一件事情,那么可以采用BLOCK的方式来实现。
Networking
URL 统一资源定位符,指定文档所在的地址
HTML 超文本标记语言,
应用层 HTTP
传输层 TCP
网络层 IP
链路层
IP协议
作用: 把各种数据包传送给对方,确保传送到对方那里的数据需要满足各类条件(IP地址,MAC地址)
ARP协议:根据通信方的IP地址找到对方的MAC地址
DNS作用:通过域名查找IP地址,或逆向从IP地址反查域名,主要提供域名到IP地址直接的解析服务
客户端向DNS服务器请求某一具体服务器的IP地址,DNS提供域名解析服务将对应目标服务器的IP地址找到,返回给客户端。客户端获取到IP地址后在应用层通过80端口进行HTTP的请求。HTTP协议此时生成针对目标WEB服务器的HTTP请求报文。然后由应用层到传输层,为了方便通信,TCP协议将HTTP请求报文分割成报文段,并且把每一个报文段可靠的传输给对方。然后到了网络层IP协议 ,IP协议搜索对方的地址,一边中转,一边传送。此时对应的物理网络设备应该是路由器。然后有交换机。TCP协议从对方那里接收到报文段,重组报文段,按照序号以原来的顺序重组报文请求。到达应用层后HTTP协议处理客户端对WEB服务器请求资源的处理。
请求报文是由 请求方法、请求URL,协议版本,可选请求首部字段,内容实体。
响应报文是由 协议版本,状态码,状态码原因短语,可选的响应首部字段,内容实体
HTTP协议使用URL定位互联网上的资源,在首部字段Host中写明网络域名或者IP地址
HTTP/1.1可使用的方法
GET 用来请求已被URL识别的资源
POST 用来传输实体的主体
PUT 用来传输文件。就像FTP协议的文件上传一样
DELETE 删除文件,按照请求URL删除指定资源
CONNECT
HTTP协议的特点
1、无连接 限制每次连接只处理一个连接请求,服务器处理完客户的请求并且收到客户的应答后断开连接
2、无状态
给定这些客户端和服务器套接字地址,客户端和服务器之间的连接就由下列套接字对唯一确定了
(128.2.194.242:51213,208.216.181:80)
美国政府持续30年不变的投资,以及充满激情的研究人员。
KVO 键值观察观察的是setter方法的改变
响应式编程 KVO还可以insert,remove,replace
block代码块主要用于对象之间的通信(反向传值和方法传递)