iOS开发中相信大家都遇到过一些问题,经常写的代码、经常用到的一些控件,在某一次用到时,突然出现了一个bug。感觉好不可思议,总觉得经常这样写的也没遇到啊。下面来看看遇到的新奇问题。
1、cocoapods中的一些问题:
安装好cocopods成功后,就是搜不到自己想要的第三方库,搜什么都不行,说找不到,这个库的作者之类的问题。[!] Unable to find a pod with name, author, summary, or descriptionmatching
然后就参考http://www.jianshu.com/p/d2d81b58d716中的方法,将cocoapods的索引删除,
rm ~/Library/Caches/CocoaPods/search_index.json,然后在重新搜索,我的问题就是这样解决了,但是可能有的同学用这样的方法没解决掉,那就参考这个链接的作者的方法吧。
While executing gem ... (OpenSSL::SSL::SSLError)
hostname "upyun.gems.ruby-china.org" does not match the server certificate
我这里使用sudo gem update --system替换命令gem update --system,声明一下如果从一开始就是用sudo的命令,那么以后的命令中也要不用sudo,否则可能会导致安装路径不同,造成必要的麻烦。
如果还是不行,建议升级一下ruby. rvm list known rvm install ruby版本
在所有安装成功后,pod --version能显示版本,理论上已经安装好了,应该能搜索了吧,但是有时候事实并非如此,我就遇到了下面的这个问题pod search 后
[!] /usr/bin/git clone https://github.com/CocoaPods/Specs.git master --progres
Cloning into 'master'...
remote: Counting objects: 1464130, done.
remote: Compressing objects: 100% (439/439), done.
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
然后网上各种找方法有一个方法说,基本可以解决参考下面的文档:
http://www.jianshu.com/p/90ca71b3b94a
但是按照这个方法试过之后,我的还是不行,这次真的生气了,各种方法都试了还是不行,然后偶然不知道在哪个地方看到的也忘了,输入pod repo update --verbose命令,然后重新,进行搜索,结果成功了,不知道到底是不是因为这句命令,如果有遇到相似问题的朋友,可以试试。
pod 导入第三方的时候(我这边导入的事友盟)找不到头文件
选择target -> BuildSettings -> search Paths 下的 User Header Search Paths, 添加
${SRCROOT}并将改成recursive
2、tableview在iPhone上显示正常,在iPad上宽度突然就变断了,而且非常明显。在网上查了一些答案,但能解决比较片面的。
ios9后苹果更新的API中有一个专门设置cell宽度是否收缩的属性,self.tableview.cellLayoutMarginsFollowReadableWidth = NO;但是iOS9之前就不能用了,现在iOS适配的话一般都还要适配到iOS8,所以这是个比较蛋疼的问题,我这边的做法是初始化tableview的时候,不要用frame,用自动布局去做,这样可以直接设置左边最右边,距离多少,我试了一下,及时设置为0的话,效果也是有的不过不是特别明显,如果要求不是特别严格的话,也可以这样做,要不就将左右两天设置的在多一点,并且判断设备是否为iPad。也没找到什么特别好的方法,如果谁有好的方法的话,可以告诉一声,这里先谢谢了。
3、xcode控制台打出的警告
虽然对程序员来说,只看error,忽视warning,但是对一些代码洁癖的人来说可能就必须要解决了,在说,从控制台自动打印出来的警告虽然不会有什么严重的后果,但是谁也不敢保证。
在控制台打印出的警告,对我们来说,有时候根本就找不到在哪,比如我遇到的一个例子:[Graphics] UIColor created with component values far outside the expected range, Set a breakpoint on UIColorBreakForOutOfRangeColorComponents to debug. This message will only be logged once.
大致一看知道是颜色方便的一个警告,创建UIColor的时候给的参数溢出,RGB值的范围是[0,1],如果给定一个超出这个值的参数,就会有这个警告但是一个项目中这么多用到颜色的地方,总不能一个个去找吧,所以就需要我们用一种比较聪明的方法来找到他。
打一个标志断点,设置断点标志。
然后run,就可以找到那些关于出现警告的代码了。
详情请参考:http://blog.csdn.net/piratest/article/details/52588042
4、手势问题,长按手势和平常用到的点击手势不同了。按平常那种写法,创建手势,将手势添加到视图上。到时我这次创建的长安手势却出现了下面的情况。
看了一下苹果的官方文档,才知道手势中的numberOfTouchesRequired属性,这个属性在其他手势设置不设置好像没有什么大碍,但是长安手势中就不行了,其他手势都是一次性操作,长按手势的话不抬起手指的话一直在响应,所以这里我们就要设置请求次数了。
UILongPressGestureRecognizer *longpress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(showMypopView:)];
longpress.numberOfTouchesRequired = 1;
[self.view addGestureRecognizer:longpress];
而在手势的方法中要判断手势的状态,手势状态分为六种,UIGestureRecognizerStateBegan,UIGestureRecognizerStateChanged,UIGestureRecognizerStateEnded,UIGestureRecognizerStateCancelled,UIGestureRecognizerStateFailed,UIGestureRecognizerStateRecognized。根据自己的场景判断,然后去执行方法,我这边是从UIGestureRecognizerStateBegan执行方法。
if (longpress.state == UIGestureRecognizerStateBegan) {
[self.myPopview showPopView];
}因此这个bug就解决了。
5、视图问题(透明度):
弹出一个遮挡视图,设置了透明度,并且在设个遮挡视图上添加控件,结果发现,添加的这个控件也变得透明了
解决方法: self.shadeView.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0.8];
而不是 self.shadeView.backgroundColor = [[UIColor blackColor];self.shadeView.alpha = 0.8;