扒蟲(chóng)篇- Bug日志 Ⅸ

1、UITabBarItem里設(shè)置的文字不顯示

PersonViewController *vc3=[[PersonViewController alloc] init];
 vc3.tabBarItem.title=@"我的";
 vc3.tabBarItem.image=[[UIImage imageNamed:@"tabBar2n"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
 vc3.tabBarItem.selectedImage=[[UIImage imageNamed:@"tabBar2l"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
 UINavigationController *nav3=[[UINavigationController alloc] initWithRootViewController:vc3];

這樣設(shè)置不顯示。

 IndexViewController *vc1=[[IndexViewController alloc] init];
 UINavigationController *nav1=[[UINavigationController alloc] initWithRootViewController:vc1];
 UITabBarItem *tabBar = [[UITabBarItem alloc]initWithTitle:@"首頁(yè)" image:[UIImage imageNamed:@"tabBar0n"] selectedImage:[UIImage imageNamed:@"tabBar0l"]];
 nav1.tabBarItem = tabBar;

這樣設(shè)置就可以顯示了。

2、解決Collection <__NSArrayM: 0xb550c30> was mutated while being enumerated.-

  ViewTest[2638:c07] *** Terminating app due to uncaught exception 'NSGenericException', reason: '
  Collection <__NSArrayM: 0xb550c30> was mutated while being enumerated.'

當(dāng)程序出現(xiàn)這個(gè)提示的時(shí)候,是因?yàn)槟阋贿叡憷麛?shù)組,又同時(shí)修改這個(gè)數(shù)組里面的內(nèi)容,導(dǎo)致崩潰,最后發(fā)現(xiàn)確實(shí)是這樣的原因,不過(guò)問(wèn)題是,很多時(shí)候這樣的寫(xiě)法并不會(huì)造成崩潰,可見(jiàn)這樣的Bug是偶現(xiàn)的。

for (NSURLSessionTask *sub in self.requestArray) {
     [sub cancel];
    [self.requestArray removeObject:sub];
}

把for- in 循環(huán)修改為 for 循環(huán)即可。

3.正常的網(wǎng)路請(qǐng)求突然出錯(cuò)

- (void)cancelAllRunningRequest
  {
   for (int i = 0; i<self.requestArray.count; i++) {
      NSURLSessionTask *sub = self.requestArray[i];
      [sub cancel];
      [self.requestArray removeObject:sub];
  }
}

那是因?yàn)槲以诟割愔械?viewWillDisappear 中調(diào)用了上述方法,
忽略了 VC的生命周期造成的問(wèn)題,
因?yàn)樵?V2的 ViewDidLoad中發(fā)起的網(wǎng)路請(qǐng)求會(huì)在 V1 的viewWillDisappear中被取消,所以就會(huì)出現(xiàn)上面的Bug。

正確的方法是在 父類中的viewDidDisappear 調(diào)用上述的方法即可。

4.Auto property synthesis will not synthesize property 'title'; it will be implemented by its superclass, use @dynamic to acknowledge intention 警告!

這個(gè)問(wèn)題是因?yàn)椋割惡妥宇愑幸粋€(gè)相同名稱的屬性。
編譯器自動(dòng)給屬性delegate合成getter和setter的時(shí)候?qū)?huì)在它的父類上實(shí)現(xiàn),也就是說(shuō)其父類也有一個(gè)delegate屬性,現(xiàn)在它不知道到底是哪一個(gè)delegate.

所以遇到這個(gè)問(wèn)題怎么解決?在子類中顯式的聲明一個(gè)@synthesize name = _name;就好,這樣子類就會(huì)如愿的產(chǎn)生他的殼,編譯器也不糾結(jié)了。

5.一個(gè)匪夷所思的Bug

兩個(gè)工程中同樣的代碼,一個(gè)可以執(zhí)行Post請(qǐng)求,一個(gè)不可以,我一直以為是 網(wǎng)路請(qǐng)求設(shè)置出了問(wèn)題,因?yàn)橐恢眻?bào)的是網(wǎng)路請(qǐng)求錯(cuò)誤,貌似跟服務(wù)器無(wú)關(guān)。

 URL :/baseinfos/dealResultForAppWarnCheckedBillDetail.gx?   
 data={"sysuserid":"10000950","fopinion":"Okkkk","fresult":"2","fwarnType":"IvFoodSalemas","fid":"43767","fwarnId":"303381"}
 (lldb) po dic
 {
 msg = "\U5904\U7406\U6210\U529f";
 status = 1;
 }
 
 URL :/baseinfos/dealResultForAppWarnCheckedBillDetail.gx?   
參數(shù):{"sysuserid":"20180111134320122911","fopinion":"ok","fresult":"2","fwarnType":"IvFoodSalemas","fid":"43767","fwarnId":"303381"}

糾結(jié)了很久,最后實(shí)在沒(méi)辦法了,就打印了兩個(gè)請(qǐng)求中的參數(shù),發(fā)現(xiàn)只有 sysuserid 這個(gè)參數(shù)不一樣,貌似還是長(zhǎng)度不一樣造成的,難道因?yàn)閰?shù)的原因可以造成這樣的網(wǎng)絡(luò)請(qǐng)求錯(cuò)誤??最后試了一下,還真是參數(shù)的問(wèn)題,把參數(shù)換成短的那個(gè),就請(qǐng)求成功了,漲姿勢(shì)了。

6.多層級(jí)文件夾拖進(jìn)Xcode 工程中出錯(cuò)


這里說(shuō)下兩種錯(cuò)誤的操作:
(1)直接把多層級(jí)的文件拖到工程中
(2)add file 到工程中時(shí)選擇的文件夾不在工程中(比如在桌面)


【1】這里上面兩個(gè)操作的最終效果都是只是引用了文件夾中的文件,當(dāng)文件所在處的文件被刪除時(shí),新工程中的對(duì)應(yīng)文件就會(huì)變成紅色,
【2】或者在新工程中修改文件,修改的相當(dāng)于原工程中的文件,原工程中的文件自然會(huì)被修改了。

正確的操作是:先把需要添加的文件夾拷貝并移動(dòng)到新工程文件夾中,然后右鍵 add file 到工程即可實(shí)現(xiàn)多層級(jí)文件夾的添加,而且不會(huì)出錯(cuò)。

7.Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)

 Class class = NSClassFromString(viewClassArray[i]);
 baseItem[i] = [[class alloc]init];
 [baseItem[i] setItemTitle:titleA[i]];
 [self addSubview:baseItem[i]];

EXC_BAD_ACCESS 這個(gè)錯(cuò)誤,可以這么說(shuō),90%的錯(cuò)誤來(lái)源在于對(duì)一個(gè)已經(jīng)釋放的對(duì)象進(jìn)行release操作(code=1,是已經(jīng)釋放的對(duì)象又進(jìn)行釋放;code=2,是對(duì)已經(jīng)釋放完的,即計(jì)數(shù)為零的對(duì)象又進(jìn)行使用——個(gè)人理解)。


開(kāi)啟僵尸模式,這個(gè)模式比較耗性能,一般Degub的時(shí)候可以使用,打包發(fā)布的時(shí)候注意取消這個(gè)模式。


最后發(fā)現(xiàn) baseItem[i] 在事先聲明中不多,比 viewClassArray 的個(gè)數(shù)少了很多,最后造成了這個(gè)內(nèi)存錯(cuò)誤。

8. &&的條件語(yǔ)句判斷中出錯(cuò)

if (baseItem[i].isMust&&(NilStr([baseItem[i] itemText]) ||[baseItem[i].itemText isEqualToString:@"-請(qǐng)選擇-"])) {
                return YES;
            }

這個(gè)條件判斷中有時(shí)候會(huì)出現(xiàn)前面成立后面不成立,但是整個(gè)判斷是成立的錯(cuò)誤狀態(tài),這個(gè)出錯(cuò)是偶然的,不知道什么原因,反正 && 兩邊都用 ()包裹住,這樣更不容易出錯(cuò)。

9.一個(gè)UITbaleViewCell中下拉框的初始化失敗的Bug

修復(fù)過(guò)后的理想效果

場(chǎng)景:下拉框是在cell中初始化的,下拉框的初始化方法在 VC中,而且下拉框的初始化事件是利用 UIResponder 傳遞的。

問(wèn)題:第一個(gè)cell初始化的時(shí)候,里面的下拉框的初始化失敗,因?yàn)閂C中的對(duì)應(yīng)的初始化事件并沒(méi)有被調(diào)用,后續(xù)添加cell時(shí),cell中的下拉框還是初始化失敗,但是滾動(dòng)UITbaleView 、或者 reLoad UITbaleView時(shí)卻可以正常的觸發(fā),猜想是UITbaleView 初始化時(shí),或者insertRowsAtIndexPaths 添加的cell在 cellForRowAtIndexPath 后才加載在UITbaleView上,所以在cellForRowAtIndexPath 的 setModel初始化時(shí)UIResponder是找不到其父視圖的。

解決辦法:把VC中的下拉框初始化方法移到 Cell中,這樣就不會(huì)出現(xiàn)上述的問(wèn)題了。而且移到cell中后詳情和新增頁(yè)面中都不用管理下拉框初始化方法了,更合理。

10.一個(gè) OS_dispatch_data 有關(guān)的網(wǎng)路請(qǐng)求


【1】首先這個(gè)網(wǎng)絡(luò)請(qǐng)求(http://XXXXXXXX:80XX/WebServiceServlet?method=getAllResourceDetailByOrg&orgCode=7654)只支持GET請(qǐng)求,POST請(qǐng)求沒(méi)有數(shù)據(jù)返回也是奇葩。
【2】OS_dispatch_data 不能用 JSON直接解析,是無(wú)法直接使用的。
【3】需要把 OS_dispatch_data 轉(zhuǎn)為 字符串,字符串去掉首尾非JSON的字符后,剩余的部分就可以使用 JSONKit 進(jìn)行解析了。

 //OS_dispatch_data
     NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
     if (str.length<6)return ;
     NSString *str1 = [str substringWithRange:NSMakeRange(5, str.length-6)];
     NSArray *ss = [str1  objectFromJSONString];
     ss 即為可以使用的數(shù)組數(shù)據(jù)了。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過(guò)CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明AI閱讀 16,230評(píng)論 3 119
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,684評(píng)論 1 32
  • 舊鐵皮綠車咔嚓著聲響 烏云里陽(yáng)光偷偷醞釀著風(fēng)霜 口袋糖果甜里透著慌 哼著歌兒的姑娘笑里全是坦蕩 夏日的余溫打翻童話...
    咸魚(yú)夢(mèng)閱讀 660評(píng)論 14 8
  • 后來(lái)我也畢業(yè)了,才畢業(yè)那幾年一直專心于工作,無(wú)心顧及感情,直到在一次跟閨蜜的偶然談話中,她無(wú)意提起了他,還跟我笑侃...
    奚緣閱讀 551評(píng)論 1 5
  • 標(biāo)準(zhǔn)輸入輸出流 字符輸入: char c = (char)System.in.read(); 字...
    acc8226閱讀 302評(píng)論 0 0

友情鏈接更多精彩內(nèi)容