最近有點小忙,雖然還抽空去SH參加了iOS的Talk。主要做的是修改了個xCode4.x時代就有的專案,主要內容是新增對iOS7的支援並完成release。不曾想專案本身還有好多問題,在修復過程中發現這些問題都是容易犯錯的地方。於是準備一一記錄,權且作為一個總結。
本文已同步到iCocoa,歡迎訪問。
iPad上Present Modal View Controller
通常情況下,iPad上使用spliteVC,這時如果需要彈出modalVC的時候,需要使用spliteVC來present。如果是用master彈出,當從橫屏轉向豎屏的時候,由於master會隱藏,所以彈出的modalVC也會消失。
AutoResize的程式碼實現
對於iOS5系統,是不支援autolayout的,要支援這一部分系統的橫豎屏旋轉的時候,可以在nib檔案裡直接設定autosize,效果很直觀。比如要實現如下的自適應:
只需要在nib檔案裡設定:
但是剛好專案中的檔案沒有使用nib,只得程式碼實現。根據nib的設定,我想當然的設定:
self.redView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleBottomMargin;
發現一旋轉view都找不到了。後來發現,如nib中設定的view 的autoresizemask的屬性居然是:W+BM,所以程式碼實現應該是:
self.redView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleBottomMargin;
ASIHttpRequest的預設長連線方式
ASI中shouldAttemptPersistentConnection預設是YES,就是會把請求作Keep alive處理。有些人遇到的問題是request會傳送2次的問題。而我這裡的問題是依次請求伺服器同一資料夾下的檔案時,有時會返回
"The operation couldn’t be completed. Connection reset by peer", NSLocalizedDescription=A connection failure occurred
而據說伺服器上沒有log,我也不想深究,發現關閉長連線後,這個問題就會消失
ASI另外一個需要注意的地方是,request結束後的成功/失敗的代理是路由到主執行緒的。有些需要在執行時在次執行緒慢慢上傳下載的請求時,要注意到這一點。
讀取orientation
讀取statu bar 的orientation,否則會返回不確定的方向
型別轉換
比如,NSUInteger的型別不要用int讀取。這個在64bit系統出來了以後,更需要注意。