项目开发快进入尾声了,之前一直较忙,也由于没有遇到什么可以记载的问题,故此一直未整理,近期渐渐闲下来,会逐渐将这个项目在开发中遇到的问题汇总出来:
2. 程序在Xcode7.2上运行一切OK,在7.3上一跑就会报 Cannot create __weak reference in file using manual reference counting 错误,是因为升级到7.3以后,非ARC下使用__weak就会报错,在非ARC模式下必须删除所有的__weak
解决办法:
三:支付宝支付功能公钥处理
1. 按照流程生成公钥私钥后在后台填好资料,(重要步骤)在账户信息中要把公钥同步
四:SDWebImage访问HTTPS站点获取图片资源失败解决办法
在使用SDWebImage第三方库是,访问http站点的图片不成问题,但当访问https站点时,会遇到一个提示:
error: NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)
遇到这个提示时,首先说说怎么解决这个问题。
在SDWebImageDownloaderOperation.m文件中增加以下方法:
在NSURLConnection 代理方法中处理信任问题:
- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
if ([challenge previousFailureCount]== 0) {
//NSURLCredential 这个类是表示身份验证凭据不可变对象。凭证的实际类型声明的类的构造函数来确定。
NSURLCredential* cre = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
[challenge.sender useCredential:cre forAuthenticationChallenge:challenge];
}
else{
}
}
这是NSURLConnection delegate的一个方法。
HTTPS 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,HTTPS的主要思想是在不安全的网络上创建一安全信道,并可在使用适当的加密包和服务器证书可被验证且可被信任时,对窃听和中间人攻击提供合理的保护。HTTPS的信任继承基于预先安装在浏览器中的证书颁发机构(如VeriSign、Microsoft等)(意即“我信任证书颁发机构告诉我应该信任的”)。因此,一个到某网站的HTTPS连接可被信任,如果服务器搭建自己的https 也就是说采用自认证的方式来建立https信道,这样一般在客户端是不被信任的,所以我们一般在浏览器访问一些https站点的时候会有一个提示,问你是否继续。
五:最近在新增活动时遇到一个bug,活动页面的布局因为没用导航栏,每次从有导航栏的页面进入时,视图就会莫名的上移20px,
查找原因使用一下方法,在viewWillAppear也就是视图每次显示时打印所有的子视图的位置
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.view.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
obj.backgroundColor = kRandomColor;
NSLog(@"%@- %zi-idx %@-view",obj,idx,NSStringFromClass([obj class]));
}];
}
发现每次从有导航栏的页面进入时,视图最基本的view的frame发生了变化,高度变了
解决方法: 在viewDidLayoutSubviews里面重置frame即可
- (void)viewDidLayoutSubviews{
self.view.frame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
}
6. (LXS)微信支付过程中服务器只返回一个订单号,需要客户端去微信下单,下单后返回的是XML数据的字符串,解析式可以先将XML字符串转换成NSXMLParser,再用XMLDictionary三方库解析:
NSDictionary* dict = [NSDictionarydictionaryWithXMLParser:parser];
7.让UITableView的section header view不悬停的方法
当 UITableView
的 style
属性设置为 Plain
时,这个tableview的section header在滚动时会默认悬停在界面顶端。取消这一特性的方法有两种:
style
设置为 Grouped
。这时所有的section header都会随着scrollview滚动了。不过 grouped
和 plain
的样式有轻微区别,切换样式后需要重新调整UI,使用grouped时,会有段尾的高度,如果不想要,可以使用代理设置段尾的高度,但是不能设为0, -(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
return 0.01f;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGFloat sectionHeaderHeight = 40;
if (scrollView.contentOffset.y<=sectionHeaderHeight&&scrollView.contentOffset.y>=0) {
scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0);
} else if (scrollView.contentOffset.y>=sectionHeaderHeight) {
scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight, 0, 0, 0);
}
}
8. 点击UITableViewCell中的按钮不起作用
在订单管理界面中UITableViewCell是由UIView改过来的,xib还是UIView创建的,没有contentView,但是UITableViewCell创建的xib应该是有一个contentView的,直接修改时xib中还是没有contentView,在创建出来以后,系统会默认将contentView加上,经过多次测试,发现系统添加的contentView会覆盖在视图最上层,导致UITableViewCell上所有控件的点击事件均失效,在代码中加入 [self insertSubview:self.contentView atIndex:0];可解决,或重写xib亦可。
9. cocoaPods重装失败,报错RPC failed; curl 56 SSLRead() return error -36问题,因为本人电脑上有三个版本的Xcode,导致路径不明,更新出现问题,可以使用一下命令行指定路径进行更新,
sudo xcode-select -switch /Applications/Xcode 8.2.1.app/Contents/Developer
也可以删除过多的Xcode,只保留一个,名字改为Xcode再更新即可
10. could not insert new outlet connection
xib/storyboard连接属性时偶尔会报这个错误,可以尝试在要连接属性的地方加入一个换行试试
11.使用git管理代码时,会出现部分路径拷贝的情况,导致同一个工程有多个路径
解决办法,删除除Podfile之外的pod相关文件,重新pod install一次即可
12.在用Swift开发项目时,引入了三方库R.swift,在pod install后偶尔会报以下错误
提示找不到R.swift/rswift文件,加上即可,R.swift所在目录下的正确文件截图如下
13. UIButton实现title有两行文字
如果两行文字大小相同,颜色相同,可以直接设置Line Break为Word Wrap,然后在Title中按option+enter就可以增加行数。
要想两行文字大小不同,颜色不同,那加一个UILabel作为UIButton的subview了应该是最方便的实现方式了。
14.IB_DESIGNABLE 和 IBInspectable 的两个比较厉害的属性;
IB_DESIGNABLE
让你的自定 UIView 可以在 IB 中预览。IBInspectable
让你的自定义 UIView 的属性出现在 IB 中 Attributes inspector 。15. exc_bad_access(code=1,address=0x0)问题
原因:访问了已经释放的对象导致
出处:声明参数时一时疏忽,把数据NSArray的用assign引用了,改为strong即可
16. message sent to deallocated instance 0x10b46e7d0
在WLYX开发的过程中,有个加入购物车的动画,有次出现报错message sent to deallocated instance 0x10b46e7d0,随后会闪退,意思是说调用了已释放对象不存在的方法,细查之下发现是因为A,B两个页面同时实现了动画协议,但是在从A页面跳转到B页面时,B页面也遵守了协议,但是在页面销毁的时候没有取消,解决办法:需要遵守协议的地方尽量写在页面出现的地方(viewDidAppear),在页面消失的时候进行销毁(viewWillDisappear)。