開發(fā)中遇到的坑

1. tableView使用時(shí)發(fā)現(xiàn)的問題

1.1 tableView 加載cell 崩潰:_configureCellForDisplay:forIndexPath

1.1.  Assertion failure in -[UITableView _configureCellForDisplay:forIndexPath:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3600.6.21/UITableView.m:8042

分析: 控制器未聲明實(shí)現(xiàn)協(xié)議tableviewDelegate  ,tableviewDataSourse  ; 錯(cuò)誤發(fā)生在注冊(cè)cell 的使用  

ps: 另外還有常見的xib 中的cell 未設(shè)置相應(yīng)的identifiter  ;  還會(huì)遇到未設(shè)置代理:數(shù)據(jù)源,導(dǎo)致協(xié)議的方法不執(zhí)行的問題


1.2 tableview 的UI細(xì)節(jié)

a. 分割線是否顯示:self.tableView.separatorStyle = UITableViewCellSeparatorStyle.none
b. 點(diǎn)擊后恢復(fù)點(diǎn)擊狀態(tài): tableView.deselectRow(at: indexPath, animated: true)

1.3 tableView 加載問題

描述:嵌套使用collectionView 和tableView ,在collectionCell 的layoutSubviews 里面注冊(cè) tableView的cell,導(dǎo)致崩潰,原因是注冊(cè)時(shí)機(jī)太晚,加載tableCell 的時(shí)候,發(fā)現(xiàn)tableCell 沒有注冊(cè)成功,重用失敗崩潰
在ios8.3/8.4  必崩

總計(jì):tableCell 的注冊(cè)應(yīng)該放在collectionCell 的awakeFromNib 方法里面,在一開始加載xib 的的時(shí)候就注冊(cè)就可以解決問題了,這是對(duì)*awakeFromNib* 和**layoutSubviews** 的加載時(shí)機(jī)沒有理解正確導(dǎo)致的

正確例子如下:awakeFromNib 是collectionCell 的方法:
- (void)awakeFromNib{
    [super awakeFromNib];
    [self.tableView registerClass:[UITableViewCellVedio class] forCellReuseIdentifier:[UITableViewCellVedio identifer_cell]];
}

錯(cuò)誤例子如下:
/*崩潰在ios8.3/8.4 上面;改成上面的額方式注冊(cè)*/
-(void)layoutSubviews{
    [super layoutSubviews];
    [self.tableView registerClass:[HomeWorkQuestionNameCell class] forCellReuseIdentifier:QuestionNameCell];
    [self.tableView registerClass:[UITableViewCellVedio class] forCellReuseIdentifier:[UITableViewCellVedio identifer_cell]];    
}

1.4 tableView 加載問題(ios8)

描述:崩潰提示*** Assertion failure in -[UITableView dequeueReusableCellWithIdentifier:forIndexPath:], /SourceCache/UIKit_Sim/UIKit-3347.44/UITableView.m:6245

執(zhí)行cellforRow cell 生成崩潰,只發(fā)生在ios 8的系統(tǒng)上面
錯(cuò)誤代碼:
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view
    [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
    [self.tableView registerNib:[UINib nibWithNibName:@"LearningCenterServiceCell" bundle:nil] forCellReuseIdentifier:@"LearningCenterServiceCell"];
}
錯(cuò)誤分析:setSeparatorStyle方法   導(dǎo)致viewLoad 里面的代碼加載順序發(fā)生變化,沒有執(zhí)行注冊(cè)cell 的方法就執(zhí)行了tableView 的代理方法,重用方式生成cell 的時(shí)候,cell 沒有注冊(cè)導(dǎo)致方法崩潰

正確代碼:
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view
    [self.tableView registerNib:[UINib nibWithNibName:@"LearningCenterServiceCell" bundle:nil] forCellReuseIdentifier:@"LearningCenterServiceCell"];
    [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
}
總結(jié):盡可能早的讓cell 注冊(cè)是防止iOS SDK 差異導(dǎo)致代碼執(zhí)行順序和一些方法的時(shí)機(jī)出現(xiàn)問題導(dǎo)致crash ,這里面的坑之前比較少遇到因?yàn)楹芏鄷r(shí)候不手動(dòng)代碼設(shè)置separatorStyle ,在xib 里面設(shè)置比較多,所以沒有出現(xiàn)過問題,今天就猜到了,不過>=9.0 的系統(tǒng)蘋果已經(jīng)調(diào)整這個(gè)限制,順序沒那么關(guān)鍵了

1.5 tableView 的reloadSections 刷新方法崩潰:
具體分析參考:iOS的那些bug崩潰 中的第二條

1.6 關(guān)于tabelView 的方法細(xì)節(jié):cellForRowAtIndexPath 和willDisplayCell 的差異

cellForRowAtIndexPath方法只負(fù)責(zé)創(chuàng)建cell,cellForRowAtIndexPath是data source協(xié)議中一個(gè)必須實(shí)現(xiàn)的方法,willDisplayCell方法才給cell進(jìn)行賦值操作,willDisplayCell是delegate協(xié)議中一個(gè)可選的方法。
tableView: cellForRowAtIndexPath: 創(chuàng)建或者從重用隊(duì)列里面取出cell,不會(huì)馬上顯示,所以不要在這里對(duì)cell進(jìn)行數(shù)據(jù)填充
tableView: willDisplayCell: forRowAtIndexPath: 這里就是需要顯示了,所以數(shù)據(jù)填充在這里進(jìn)行,
以上只是針對(duì)比較復(fù)雜的cell才這樣做,一般的都放在tableView: cellForRowAtIndexPath: 即可

2.swift 調(diào)用oc 的時(shí)候,方法不能自動(dòng)匹配識(shí)別,需要手動(dòng)拼寫轉(zhuǎn)換后的方法<首先要保證oc頭文件引入到橋接文件中>

oc 方法:
+ (void)produceNavSeatWorkWithCourseId:(NSInteger)cid lessonId:(NSInteger)lid   type:(HomeWorkType)type    success:(void(^)(SeatWorkViewController * seatWork,BOOL isDone))success failure:(void(^)(NSError * error))failure;

轉(zhuǎn)換后的swift 方法:
  SeatWorkViewControllerManager.produceNavSeatWork(withCourseId:cid, lessonId:lid,type:HomeWorkType.nomal, success: { (seatWork:SeatWorkViewController!,isDone:Bool) in
         //doSomthing

   }) {(error:Error?) in
            

     }

3. 0 xib設(shè)置UITextField的私有屬性placeholderColor

在使用UITextField時(shí)發(fā)現(xiàn)在公開的屬性里面并沒有用來設(shè)置placeholderColor的屬性,這樣很難滿足設(shè)計(jì)師的需求,通過xib可以輕松設(shè)置UITextField的placeholderColor,同樣首先也需要進(jìn)入上面步驟的那個(gè)頁面,然后添加 placeholderLabel.textColor 的鍵值對(duì)來設(shè)置顏色


這里寫圖片描述
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評(píng)論 6 546
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,814評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,980評(píng)論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評(píng)論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,779評(píng)論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,109評(píng)論 1 330
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評(píng)論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,287評(píng)論 0 291
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,799評(píng)論 1 338
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,515評(píng)論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,750評(píng)論 1 375
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評(píng)論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,933評(píng)論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評(píng)論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,492評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,703評(píng)論 2 380

推薦閱讀更多精彩內(nèi)容

  • 1.mac下刪除項(xiàng)目目錄中所有的.svn文件夾 通過下面這個(gè)方式可以成功刪除(以嘗試)sudo find /Use...
    moxuyou閱讀 529評(píng)論 2 12
  • 首先聲明,這篇文章大部分是我從cocoaChina上面看的一篇文章www.cocoachina.com/ios/2...
    薰衣草兒閱讀 540評(píng)論 0 5
  • 這篇文章的內(nèi)容包含:UITableViewCell的真實(shí)結(jié)構(gòu)在iOS的環(huán)境下使用正則表達(dá)式如何優(yōu)雅的隱藏tabba...
    施憶閱讀 1,072評(píng)論 0 0
  • 1.關(guān)于本地化數(shù)據(jù)(NSUserDefault) 當(dāng)關(guān)鍵數(shù)據(jù)在iOS版本更新時(shí)發(fā)生數(shù)據(jù)類型改變時(shí),最好使用新的ke...
    渣新iOS程序員sun某閱讀 367評(píng)論 0 0
  • 曾經(jīng)的我們是一對(duì)讓人羨慕地戀人,現(xiàn)在的我們卻是最熟悉的陌生人;親愛的,我想你了!即使你已經(jīng)離開了,現(xiàn)在的我還是無法...
    羅明俊閱讀 273評(píng)論 2 0