iOS 開發中遇到的問題以及解決方法
1、圖片出現鋸齒(顯示區域與圖片像素不匹配)
解決方案:
先將圖片畫出來,進行裁剪使用
- (UIImage *)scaleToSize:(UIImage *)img size:(CGSize)size {
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
[img drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return scaledImage;
}
2、徹底移除cell 的分割線(有的cell要分割線,有的cell不要分隔線,又有的cell分割線拒里前端15pix。搞得我也真是醉了,如果用自定義分割線的話也不好處理。)
解決方法:
在自定義cell中重寫UITableviewCell的addSubView:方法
- (void)addSubview:(UIView *)view
{
if (![view isKindOfClass:[NSClassFromString(@"_UITableViewCellSeparatorView") class]] && view)
[super addSubview:view];
}
3、webViewDidFinishLoad 執行多次的有關問題說網頁內有異步請求或者重定向時,就會多次調用上述方法
解決辦法:
(1)、用webView的isLoading屬性:
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
if (webView.isLoading) {
return;
}
//code...
}
這樣每進入一個新的網頁,webViewDidFinishLoad只執行一次。
(2)、定義一個屬性:@property(nonatomic) BOOL isFirstLoadWeb;
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
if (!self.isFirstLoadWeb) {
self.isFirstLoadWeb = YES;
}else{
return;
//code...
}
4、你在viewcontroller中使用scrollview,并在scrollview中的添加了viewA,但viewA的位置總是差些像素。通過Dlog發現又都是正常的。
解決方法:
是viewcontroller 的automaticallyAdjustsScrollViewInsets這個屬性在作怪。automaticallyAdjustsScrollViewInsets的作用是:讓scroll view的內容自動調整,且他的默認是YES;不想讓它自動調整就將它設置為NO,就好了。(即:self.automaticallyAdjustsScrollViewInsets = NO;)
5、想打印視圖的層次結構
解決方法:
打印視圖的層次結構的方法叫做 recursiveDescription,recursiveDescription能打印出任意視圖的視圖層次結構。值得注意是它是一個私有方法, “不應該被包含在任何會被放到 App Store 的代碼里”,但它對與視圖層次結構實在非常有用。
以打印一個cell的層次結構為例:
NSLog(@"Cell recursive description:\n\n%@\n\n", [cell performSelector:@selector(recursiveDescription)]);
6、view被導航條給覆蓋了,并沒有從導航條的下面開始布局
解決方法:
(1)、設置edgesForExtendedLayout
self.edgesForExtendedLayout = UIRectEdgeNone; //view不需要拓展到整個屏幕
(2)、設置導航條的透明度
self.navigationController.navigationBar.translucent = NO;
7、斷點調試技巧
(1)、條件斷點
打上斷點之后,對斷點進行編輯,設置相應過濾條件。下面簡單的介紹一下條件設置:
Condition:返回一個布爾值,當布爾值為真觸發斷點,一般里面我們可以寫一個表達式。
Ignore:忽略前N次斷點,到N+1次再觸發斷點。
Action:斷點觸發事件,分為六種:
AppleScript:執行腳本。
Capture GPU Frame:用于OpenGL ES調試,捕獲斷點處GPU當前繪制幀。
Debugger Command:和控制臺中輸入LLDB調試命令一致。
Log Message:輸出自定義格式信息至控制臺。
Shell Command:接收命令文件及相應參數列表,Shell Command是異步執行的,只有勾選“Wait until done”才會等待Shell
命令執行完在執行調試。
Sound:斷點觸發時播放聲音。
這些功能平時在調試程序的過程中都可以進行嘗試,說實話我用的設置Condition項會較多些。
斷點編輯.png
(2)、異常斷點
異常斷點可以快速定位不滿足特定條件的異常,比如常見的數組越界,這時候很難通過異常信息定位到錯誤所在位置。這個時候異常斷點就可以發揮作用了。
添加異常斷點的步驟:
異常斷點.png
右擊異常斷點.png
編輯異常斷點.png
(3)、符號斷點
符號斷點的創建方式和異常斷點一樣一樣的,在符號斷點中可以指定要中斷執行的方法:
舉個例子,常見的場景,我想讓它執行到ViewController類中的viewWillAppear方法就中斷執行:
添加符號斷點的步驟:
符號斷點.png
編輯符號斷點.png
Symbol:[ViewController viewWillAppear:]即[類名 方法名]可以執行到指定類的指定方法中開始斷點。如果只有viewWillAppear:即方法名,它會執行到所以類中的viewWillAppear:方法中開始斷點。
PS:駕馭命運的舵是奮斗。不抱有一絲幻想,不放棄一點機會,不停止一日努力。
James.png
來自:http://www.jianshu.com/p/432985f57b54