1.编写程序时,出现崩溃怎么解决?
1> 导出崩溃日志...
(1) 可以在 xcode 的顶部菜单中,找到 Windows-->devices 选项,在弹出的窗口选中左侧我的 iPhone,
(2) 点击右侧 view devices logs 按钮,查看左侧列表崩溃列表,并选中当前程序,右键 export log,导出.
2> 找到 dysm
(1) XCode编译产生的app文件和dYSM文件路径(可以通过快捷键 command+,打开,进入顶部的 location,点击DerivedData后面的按钮,查找以下路径)
<current User>/Library/Developer/XCode/DerivedData/<Project name>-<other character>/Build/Products
(2) 直到找到.app 和. dysm 为止.
3> 归同一个文件夹
将第一步导出的 log 和第二部找到的 app 文件和 dysm 文件放入同一个文件夹
4> cd 进入以上文件夹,执行以下命令:
xcrun atos -o PandaTV-ios.app.dSYM/Contents/Resources/DWARF/PandaTV-ios -arch arm64 -l 0x100090000 0x1008f2de4
(PS:只改变倒数第一/二个参数即可,倒数第二个是基地址,倒数第一个是偏移地址)
5> 确定基地址和偏移地址
崩溃日志中 PandaTV-ios 0x1008f2de4 0x100090000 + 8793572
只需要解析以 app 名称打头的崩溃语句,其中0x1008f2de4是偏移地址,0x100090000才是基地址
2.webview 打开时,有加载失败的提示.
1> Error Domain=WebKitErrorDomain Code=102 "帧框加载已中断" UserInfo={NSErrorFailingURLStringKey=http://itunes.apple.com/cn/app/..
2> 应该是链接有问题,把 http 换成 https 有可能成功.
3> Error Domain=WebKitErrorDomain Code=101 "无法显示 URL" UserInfo={NSErrorFailingURLStringKey=quddddddeals://home, NSLocalizedDescription=无法显示 URL, NSErrorFailingURLKey=quddddddeals://home}
4> 应该是 urlscheme 没有添加quddddddeals,并最好把quddddddeals放入LSApplicationQueriesSchemes白名单中.
3.iOS 8 UIKeyboardWillShowNotification通知可以收到,但是无法执行
1> 在 iOS 9及以上系统在收到UIKeyboardWillShowNotification通知时,能迅速执行UI 操作,但是 iOS 8 系统收到该通知时, UI 操作不生效.
2> 网上查了 iOS 8 相关资料后,都是UIKeyboardWillShowNotification调用两次的处理方法,和我的目的不一样.
3> 情急之下,我查了查其余类似的通知,添加了UIKeyboardDidShowNotification方法,竟然能成功,只是会晚点儿执行.
4> 做了最坏的打算,跳跃多层 view, 来监听这个事件...
5> 绝望时,无意间想到,这是 UI 操作,是不是在子线程无法执行啊???于是就写进了 dispatch_asyn,还是不起作用
6> 灵机一动,把 dispatch_asyn 改成 dispatch_after 会怎么样???结果竟然真成功了
7> 看来是时序的问题喽,延迟0.15秒后执行,就完美了.
4.iOS7 让有导航控制器中的控件从导航栏下面开始布局(origin.y == 0的位置)
1> 让控制器的 edgesForExtendedLayout 属性设置为 UIRectEdgeNone .
2> 让控制器的导航栏不透明self.navigationController.navigationBar.translucent = NO;
3> 以上两种方法任选一种,都可以让控件从导航栏顶部开始布局.
5.自定义的slider
1> 可以继承 UIControl 的 continueTrackingWithTouch:withEvent:方法,来响应滑动事件...
6.UILable 一半是白的一半是绿的
1> 设置了 attributeText 属性以后有可能出现这个问题
7.在最外层页面 push 新界面失败
1> push 操作一般需要两个元素,一个是根导航控制器,一个是要跳转的页面.后者没问题的话,只能是前者出了问题.
2> 在弹出UIAlertView框时,[UIApplication sharedApplication].keyWindow 会指向该UIAlertView框.进而导致查找最外层页面失败.
3> 解决方案是使用 appdelegate 中的 window, 永远不会错.[UIApplication sharedApplication].delegate.window.rootViewController
8.判断禁用 bounces 的 UIScrollView 对象左滑还是右滑,上滑还是下滑
1> 由于 bounces 禁用,没有弹性效果,滑到最左边时, contentOffset.x 最小值为0,因此得考虑其他方法. 开始拖拽+结束拖拽 是个好方法
2> 若 bounces 没有被禁用,本想只使用 scrollViewDidScroll 一个方法来确定是否是左滑退出的,但是该方法会调用很多次,会影响打点等操作,因此推荐步骤1方法.
1 - (void)scrollViewDidScroll:(UIScrollView *)scrollView 2 { 3 if (scrollView == _scrollView) 4 { 5 // 判断是否左滑退出 6 _isScrollToRight = YES; 7 } 8 } 9 10 - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset 11 { 12 if (scrollView == _scrollView) 13 { 14 // 判断是否左滑退出 15 if (_lastContentOffsetX == 0 && 16 !_isScrollToRight && 17 _lastContentOffsetX >= scrollView.contentOffset.x) 18 { 19 } 20 } 21 } 22 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 23 { 24 if (scrollView == _scrollView) 25 { 26 // 判断是否左滑退出 27 _lastContentOffsetX = scrollView.contentOffset.x; 28 _isScrollToRight = NO; 29 } 30 }
1 - (void)scrollViewDidScroll:(UIScrollView *)scrollView 2 { 3 CGFloat lastY = _tableViewLastContentOffsetY; 4 // 上滑 5 if (scrollView.contentOffset.y >= lastY) 6 { 7 PTVLog(@"LZ465350---上滑....%f",scrollView.contentOffset.y); 8 9 // 排除用力下拉到头,又反弹(上弹)到平衡位置的情况 10 if (scrollView.contentOffset.y <= _tableViewFirstContentOffsetY) 11 { 12 } 13 else 14 { 15 [self moveTagView:YES distance:ABS(scrollView.contentOffset.y - lastY)]; 16 } 17 18 } 19 // 下滑 20 else 21 { 22 PTVLog(@"LZ465350---下滑..%@.....%f",scrollView,scrollView.contentOffset.y); 23 24 // 排除用力上拉到头,又反弹(下弹)到平衡位置的情况 25 if (scrollView.contentOffset.y + scrollView.height >= scrollView.contentSize.height) 26 { 27 } 28 else 29 { 30 [self moveTagView:NO distance:ABS(scrollView.contentOffset.y - lastY)]; 31 32 } 33 34 } 35 _tableViewLastContentOffsetY = scrollView.contentOffset.y; 36 } 37 38 - (void)moveTagView:(BOOL)up distance:(CGFloat)distance 39 { 40 if (up) 41 { 42 if (self.tagView.y > -self.tagView.height) 43 { 44 self.tagView.y -= distance; 45 if (self.tagView.y < -self.tagView.height) 46 { 47 self.tagView.y = -self.tagView.height; 48 } 49 } 50 } 51 else 52 { 53 if (self.tagView.y < 0) 54 { 55 self.tagView.y += distance; 56 if (self.tagView.y > 0) 57 { 58 self.tagView.y = 0; 59 } 60 } 61 } 62 }
9.点击屏幕 UITableView 以外的区域, 列表变灰
1> 设置了 UITableView 对象的 allowsSelection 属性可能不生效,而且无法使用 tableview 的 didselect 代理方法.
2> 还需要把 UITableViewCell 对象的 selectionStyle 属性设置为UITableViewCellSelectionStyleNone,才能生效.
10.查找没有显示的 cell
1> UICollectionViewCell *hotCell = [self cellForItemAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0]];
是没有用的.
2> 可以遍历 UICollectionView 的子视图,其子视图就是其 cell.
3> UITableView 就没有这么好说话了,子视图不是其 cell, 要想找到没有显示的 cell, 只能通过先修改数据源,再刷新某一个 item 的数据来实现.