iOS 开发中遇到的问题以及解决方法
pkct3405
8年前
<h3><strong>1、图片出现锯齿(显示区域与图片像素不匹配)</strong></h3> <h3><strong>解决方案:</strong></h3> <p>先将图片画出来,进行裁剪使用</p> <pre> <code class="language-objectivec">- (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; }</code></pre> <h3><strong>2、彻底移除cell 的分割线(有的cell要分割线,有的cell不要分隔线,又有的cell分割线拒里前端15pix。搞得我也真是醉了,如果用自定义分割线的话也不好处理。)</strong></h3> <h3><strong>解决方法:</strong></h3> <p>在自定义cell中重写UITableviewCell的addSubView:方法</p> <pre> <code class="language-objectivec">- (void)addSubview:(UIView *)view { if (![view isKindOfClass:[NSClassFromString(@"_UITableViewCellSeparatorView") class]] && view) [super addSubview:view]; }</code></pre> <h3><strong>3、webViewDidFinishLoad 执行多次的有关问题说网页内有异步请求或者重定向时,就会多次调用上述方法</strong></h3> <h3><strong>解决办法:</strong></h3> <p>(1)、用webView的isLoading属性:</p> <pre> <code class="language-objectivec">- (void)webViewDidFinishLoad:(UIWebView *)webView { if (webView.isLoading) { return; } //code... }</code></pre> <p>这样每进入一个新的网页,webViewDidFinishLoad只执行一次。</p> <p>(2)、定义一个属性:@property(nonatomic) BOOL isFirstLoadWeb;</p> <pre> <code class="language-objectivec">- (void)webViewDidFinishLoad:(UIWebView *)webView { if (!self.isFirstLoadWeb) { self.isFirstLoadWeb = YES; }else{ return; //code... }</code></pre> <h3><strong>4、你在viewcontroller中使用scrollview,并在scrollview中的添加了viewA,但viewA的位置总是差些像素。通过Dlog发现又都是正常的。</strong></h3> <h3><strong>解决方法:</strong></h3> <p>是viewcontroller 的automaticallyAdjustsScrollViewInsets这个属性在作怪。automaticallyAdjustsScrollViewInsets的作用是:让scroll view的内容自动调整,且他的默认是YES;不想让它自动调整就将它设置为NO,就好了。(即:self.automaticallyAdjustsScrollViewInsets = NO;)</p> <h3><strong>5、想打印视图的层次结构</strong></h3> <h3><strong>解决方法:</strong></h3> <p>打印视图的层次结构的方法叫做 recursiveDescription,recursiveDescription能打印出任意视图的视图层次结构。值得注意是它是一个私有方法, “不应该被包含在任何会被放到 App Store 的代码里”,但它对与视图层次结构实在非常有用。</p> <p>以打印一个cell的层次结构为例:</p> <p>NSLog(@"Cell recursive description:\n\n%@\n\n", [cell performSelector:@selector(recursiveDescription)]);</p> <h3><strong>6、view被导航条给覆盖了,并没有从导航条的下面开始布局</strong></h3> <h3><strong>解决方法:</strong></h3> <p>(1)、设置edgesForExtendedLayout</p> <pre> <code class="language-objectivec">self.edgesForExtendedLayout = UIRectEdgeNone; //view不需要拓展到整个屏幕</code></pre> <p>(2)、设置导航条的透明度</p> <pre> <code class="language-objectivec">self.navigationController.navigationBar.translucent = NO;</code></pre> <h3><strong>7、断点调试技巧</strong></h3> <p><strong>(1)、条件断点</strong></p> <p>打上断点之后,对断点进行编辑,设置相应过滤条件。下面简单的介绍一下条件设置:</p> <pre> <code class="language-objectivec">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</code></pre> <p>命令执行完在执行调试。</p> <pre> <code class="language-objectivec">Sound:断点触发时播放声音。</code></pre> <p>这些功能平时在调试程序的过程中都可以进行尝试,说实话我用的设置Condition项会较多些。</p> <p style="text-align:center"><img src="https://simg.open-open.com/show/00cfc0778bc2137bceb5ec234380a7d9.png"></p> <p style="text-align:center">断点编辑.png</p> <p><strong>(2)、异常断点</strong></p> <p>异常断点可以快速定位不满足特定条件的异常,比如常见的数组越界,这时候很难通过异常信息定位到错误所在位置。这个时候异常断点就可以发挥作用了。</p> <h3><strong>添加异常断点的步骤:</strong></h3> <p style="text-align:center"><img src="https://simg.open-open.com/show/7e8df29bae05e6b6432c15b094dcf1c2.png"></p> <p style="text-align:center">异常断点.png</p> <p style="text-align:center"><img src="https://simg.open-open.com/show/d88e9e38a8f77fb77f70f4c09516bd8a.png"></p> <p style="text-align:center">右击异常断点.png</p> <p style="text-align:center"><img src="https://simg.open-open.com/show/59c4d6b3c3d8fcb9aa24c897cd849088.png"></p> <p style="text-align:center">编辑异常断点.png</p> <p><strong>(3)、符号断点</strong></p> <p>符号断点的创建方式和异常断点一样一样的,在符号断点中可以指定要中断执行的方法:</p> <p>举个例子,常见的场景,我想让它执行到ViewController类中的viewWillAppear方法就中断执行:</p> <h3><strong>添加符号断点的步骤:</strong></h3> <p style="text-align:center"><img src="https://simg.open-open.com/show/4411ff338426d9a5a81c761901488624.png"></p> <p style="text-align:center">符号断点.png</p> <p style="text-align:center"><img src="https://simg.open-open.com/show/2bb2944184549958c5e0b473f7770048.png"></p> <p style="text-align:center">编辑符号断点.png</p> <p>Symbol:[ViewController viewWillAppear:]即[类名 方法名]可以执行到指定类的指定方法中开始断点。如果只有viewWillAppear:即方法名,它会执行到所以类中的viewWillAppear:方法中开始断点。</p> <p>PS:驾驭命运的舵是奋斗。不抱有一丝幻想,不放弃一点机会,不停止一日努力。</p> <p style="text-align:center"><img src="https://simg.open-open.com/show/550d4f257072a83373566bbcec7c6d08.jpg"></p> <p style="text-align:center">James.png</p> <p> </p> <p>来自:http://www.jianshu.com/p/432985f57b54</p> <p> </p>