iOS開發(fā)中相信大家都遇到過一些問題,經(jīng)常寫的代碼、經(jīng)常用到的一些控件,在某一次用到時,突然出現(xiàn)了一個bug。感覺好不可思議,總覺得經(jīng)常這樣寫的也沒遇到啊。下面來看看遇到的新奇問題。
1、cocoapods中的一些問題:
安裝好cocopods成功后,就是搜不到自己想要的第三方庫,搜什么都不行,說找不到,這個庫的作者之類的問題。[!] Unable to find a pod with name, author, summary, or descriptionmatching
然后就參考http://www.lxweimin.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,否則可能會導(dǎo)致安裝路徑不同,造成必要的麻煩。
如果還是不行,建議升級一下ruby. ? rvm list known ? ? ?rvm install ruby版本
在所有安裝成功后,pod --version能顯示版本,理論上已經(jīng)安裝好了,應(yīng)該能搜索了吧,但是有時候事實并非如此,我就遇到了下面的這個問題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
然后網(wǎng)上各種找方法有一個方法說,基本可以解決參考下面的文檔:
http://www.lxweimin.com/p/90ca71b3b94a
但是按照這個方法試過之后,我的還是不行,這次真的生氣了,各種方法都試了還是不行,然后偶然不知道在哪個地方看到的也忘了,輸入pod repo update --verbose命令,然后重新,進行搜索,結(jié)果成功了,不知道到底是不是因為這句命令,如果有遇到相似問題的朋友,可以試試。
pod 導(dǎo)入第三方的時候(我這邊導(dǎo)入的事友盟)找不到頭文件
選擇target -> BuildSettings -> search Paths 下的 User Header Search Paths, 添加
${SRCROOT}并將改成recursive
2、tableview在iPhone上顯示正常,在iPad上寬度突然就變斷了,而且非常明顯。在網(wǎng)上查了一些答案,但能解決比較片面的。
ios9后蘋果更新的API中有一個專門設(shè)置cell寬度是否收縮的屬性,self.tableview.cellLayoutMarginsFollowReadableWidth = NO;但是iOS9之前就不能用了,現(xiàn)在iOS適配的話一般都還要適配到iOS8,所以這是個比較蛋疼的問題,我這邊的做法是初始化tableview的時候,不要用frame,用自動布局去做,這樣可以直接設(shè)置左邊最右邊,距離多少,我試了一下,及時設(shè)置為0的話,效果也是有的不過不是特別明顯,如果要求不是特別嚴格的話,也可以這樣做,要不就將左右兩天設(shè)置的在多一點,并且判斷設(shè)備是否為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.
大致一看知道是顏色方便的一個警告,創(chuàng)建UIColor的時候給的參數(shù)溢出,RGB值的范圍是[0,1],如果給定一個超出這個值的參數(shù),就會有這個警告但是一個項目中這么多用到顏色的地方,總不能一個個去找吧,所以就需要我們用一種比較聰明的方法來找到他。
打一個標志斷點,設(shè)置斷點標志。
然后run,就可以找到那些關(guān)于出現(xiàn)警告的代碼了。
詳情請參考:http://blog.csdn.net/piratest/article/details/52588042
4、手勢問題,長按手勢和平常用到的點擊手勢不同了。按平常那種寫法,創(chuàng)建手勢,將手勢添加到視圖上。到時我這次創(chuàng)建的長安手勢卻出現(xiàn)了下面的情況。
看了一下蘋果的官方文檔,才知道手勢中的numberOfTouchesRequired屬性,這個屬性在其他手勢設(shè)置不設(shè)置好像沒有什么大礙,但是長安手勢中就不行了,其他手勢都是一次性操作,長按手勢的話不抬起手指的話一直在響應(yīng),所以這里我們就要設(shè)置請求次數(shù)了。
UILongPressGestureRecognizer *longpress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(showMypopView:)];
longpress.numberOfTouchesRequired = 1;
[self.view addGestureRecognizer:longpress];
而在手勢的方法中要判斷手勢的狀態(tài),手勢狀態(tài)分為六種,UIGestureRecognizerStateBegan,UIGestureRecognizerStateChanged,UIGestureRecognizerStateEnded,UIGestureRecognizerStateCancelled,UIGestureRecognizerStateFailed,UIGestureRecognizerStateRecognized。根據(jù)自己的場景判斷,然后去執(zhí)行方法,我這邊是從UIGestureRecognizerStateBegan執(zhí)行方法。
if (longpress.state == UIGestureRecognizerStateBegan) {
[self.myPopview showPopView];
}因此這個bug就解決了。
5、視圖問題(透明度):
彈出一個遮擋視圖,設(shè)置了透明度,并且在設(shè)個遮擋視圖上添加控件,結(jié)果發(fā)現(xiàn),添加的這個控件也變得透明了
解決方法:? self.shadeView.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0.8];
而不是 self.shadeView.backgroundColor = [[UIColor blackColor];self.shadeView.alpha = 0.8;