搜得到的宦搬,方便處理的沈自,就不說了邻奠。只是記錄總結(jié)笤喳。
1.contentOffset莫名改變
表現(xiàn):頁面push、pop后莫名高出20或低20碌宴。
解決方法:viewController.automaticallyAdjustsScrollViewInsets = NO;
問題非常不好定位杀狡,需要排查確定是contentOffset改變而不是y、height等屬性唧喉。
2.該證書的簽發(fā)者無效
下載:https://developer.apple.com/certificationauthority/AppleWWDRCA.cer
3.JPush目標(biāo)0成功0
web端推送時(shí)應(yīng)用設(shè)置的推送環(huán)境是生產(chǎn),plist的APS_FOR_PRODUCTION也設(shè)置的1忍抽,設(shè)備上的app是從appStore上下的八孝,然后推送的MessageID讓極光技術(shù)查了之后發(fā)現(xiàn),設(shè)備還在開發(fā)環(huán)境鸠项!
查了之后發(fā)現(xiàn)是用了一個(gè)已失效的生產(chǎn)證書……盡管極光驗(yàn)證通過干跛,但它是失效的。
4.class_copyPropertyList內(nèi)存泄漏
用profile的leaks工具查了一下項(xiàng)目的內(nèi)存祟绊,泄漏不少……大部分是一個(gè)解析數(shù)據(jù)的工具方法的一行出了錯(cuò):
objc_property_t *popertylist = class_copyPropertyList(clazz, &count);
遂看class_copyPropertyList的說明:
An array of pointers of type objc_property_t describing the properties declared by the class. Any properties declared by superclasses are not included. The array contains *outCount pointers followed by a NULL terminator. You must free the array with free().
5.蜜汁bug小記
現(xiàn)象:
A viewController ,點(diǎn)按鈕buttonA跳轉(zhuǎn)到 B viewController楼入,點(diǎn)按鈕buttonB跳轉(zhuǎn)到C viewController哥捕,都是navigationController的push和pop跳轉(zhuǎn)的。
A第一次加載嘉熊,沒問題遥赚;點(diǎn)buttonA跳轉(zhuǎn),沒問題阐肤,B也正常凫佛;返回A,沒問題孕惜。
點(diǎn)buttonB跳轉(zhuǎn)愧薛,沒問題,刪光C中tableView的數(shù)據(jù)衫画,ABC的數(shù)據(jù)是聯(lián)動(dòng)的毫炉,返回A,沒問題削罩;點(diǎn)buttonA跳轉(zhuǎn)到B瞄勾,問題來了。
加了全局exception之后鲸郊,崩潰在A的cellForRowAtIndexPath的方法上丰榴。
這不是逗我嘛?
加了各種NSLog之后秆撮,發(fā)現(xiàn)崩潰的時(shí)機(jī)非常詭異四濒,是在A執(zhí)行完viewWillDisappear,B執(zhí)行完viewWillAppear职辨,A還沒有執(zhí)行到viewDidDisappear的時(shí)候盗蟆。
根據(jù)輸出可以發(fā)現(xiàn),此時(shí)舒裤,B中的numberOfSections和numberOfRowsInSection執(zhí)行了三遍喳资,然后!執(zhí)行了A的cellForRow和heightForRow……
為何腾供?仆邓??
百思不得其解伴鳖!最后只有在崩潰的地方节值,也就是
cell.itemData = [self.dataList objectAtIndex:indexPath.row];之前加了判斷,如果dataList為空榜聂,或者indexPath不認(rèn)識(shí)row這個(gè)方法搞疗,那么直接返回cell,不再把數(shù)據(jù)賦過去须肆。
果然不再崩潰……然而我依然不懂匿乃,為何會(huì)執(zhí)行A的這兩個(gè)方法桩皿?為何tableView的代理方法里indexPath會(huì)不認(rèn)識(shí)row?幢炸?泄隔?
6.制作framework的坑
6.1報(bào)錯(cuò)說xib或者image或者xml找不到:
6.1.1在framework工程中,把所有添加圖片阳懂、xib的例如imageWithNamed:"back"的地方梅尤,給圖片名、xib名加上前綴岩调,變成這樣:imageWithNamed:"Frameworks/myFramework.framework/back"
6.1.2在測(cè)試framework的工程中巷燥,選擇Build Phases,點(diǎn)左上角的加號(hào)号枕,選New Copy Files Phase缰揪。在這個(gè)新出現(xiàn)的Copy Files (0 items)中,第一項(xiàng)Destination選Frameworks葱淳,然后點(diǎn)“Add files here”下面的加號(hào)钝腺,找到自己的framework,點(diǎn)Add赞厕。
6.2如果你先測(cè)了模擬器版本的framework艳狐,想在真機(jī)上測(cè)試一下。需要這樣做:
6.2.1刪去先前導(dǎo)入的模擬器版本framework皿桑,Build Settings里搜“search”毫目,找到Framework Search Path,看看是否還殘留有模擬器版本的framework的路徑诲侮,如果有镀虐,刪掉。
6.2.2導(dǎo)入真機(jī)版本的framework沟绪,并檢查Framework Search Path是不是真機(jī)版本的路徑刮便,如果不是,改绽慈。
6.2.3如果不按這個(gè)順序來會(huì)怎么樣呢恨旱?會(huì)完全找不到庫,報(bào)dyld: Library not loaded的錯(cuò)坝疼。如果你按網(wǎng)上搜到的大部分的方法搜贤,把framework改成optional的,當(dāng)然裙士,程序不會(huì)崩潰入客,但是你的framework依然不生效管毙,因?yàn)樗€是找不到腿椎。只有保證你導(dǎo)入的是真機(jī)版本桌硫,查找路徑也是真機(jī)版本,它才能被找到啃炸,才能真正運(yùn)行起來铆隘。
6.3如果你把你的測(cè)試項(xiàng)目發(fā)給其他同事、朋友讓他們幫你看問題南用,請(qǐng)讓他們新建一個(gè)項(xiàng)目膀钠,把你的測(cè)試代碼拷進(jìn)去,把你的庫拖進(jìn)去裹虫,不然還是找不到肿嘲。
7.更新帶來的各種
7.1 code signing entitlements 這個(gè)字段在Xcode7.2、7.3打包時(shí)必須為空筑公,Xcode8則不需要雳窟。不然打包導(dǎo)出的時(shí)候會(huì)報(bào)錯(cuò)。報(bào)的錯(cuò)去搜有很多解決方法(ios - An App ID with Identifier '' is not available. Please enter a different string - Stack Overflow)匣屡,然而……實(shí)際問題各不相同封救。
7.2 用Xcode7.2打包,OS X 10.12捣作,這個(gè)包無論是通過Xcode自帶的還是下載的Application Loader上傳時(shí)都會(huì)失敗誉结。解決方法是,打出來之后發(fā)送給一臺(tái)OS X 10.11的電腦券躁,用它上傳惩坑,才沒問題。