iOS開發(fā)遇到的奇葩的問題

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è)置斷點標志。

1
2

然后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;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容