最近版本測試階段,發現一個奇怪的問題,以前在A測試機上出現的崩潰bug,解決後今天在B測試機上又出現了,在B上解決完之後,返回到設備A上發現又不行了。最後調試發現是測試設備系統版本不同導致的,A設備是iOS10的,而B設備是iOS11的,需求是,當點擊自定義的UITableViewCell時,需要它 ...
最近版本測試階段,發現一個奇怪的問題,以前在A測試機上出現的崩潰bug,解決後今天在B測試機上又出現了,在B上解決完之後,返回到設備A上發現又不行了。最後調試發現是測試設備系統版本不同導致的,A設備是iOS10的,而B設備是iOS11的,需求是,當點擊自定義的UITableViewCell時,需要它所在的UITableView跳轉到下一頁面。
最初用到的具體核心代碼是:
[(UITableView *)self.superview reloadData];
於是在A設備上閃退了,錯誤信息如下:
其中有解釋說[UITableViewWrapperView reloadData]方法找不到,最後好奇的看了下層級結構,終於明白是什麼情況了,總結下:
iOS7至iOS10系統下的UItableViewCell的父視圖是UITableViewWrapperView,而iOS7以下和iOS11以上系統UItableViewCell的父視圖是UITableViewCell。
所以之後點擊cell跳轉應該判斷系統版本
float version=[[[UIDevice currentDevice] systemVersion] floatValue]; if(version >= 7.0 && version < 11.0) { [(UITableView *)self.superview.superview reloadData]; }else { [(UITableView *)self.superview reloadData]; }
或者
if ([self.superview isKindOfClass:[UITableView class]]) { [(UITableView *)self.superview reloadData]; }else{ [(UITableView *)self.superview.superview reloadData]; }
知道問題的原因了,解決方法可以有多種,就不多說了,希望對小伙伴有幫助。