常見問題(三)


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 的數據來實現.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM