学习
实践
活动
工具
TVP
写文章
专栏首页進无尽的文章扒虫篇- Bug日志 Ⅸ

扒虫篇- Bug日志 Ⅸ

1、UITabBarItem里设置的文字不显示

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];

这样设置不显示。

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

这样设置就可以显示了。

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.'

当程序出现这个提示的时候,是因为你一边便利数组,又同时修改这个数组里面的内容,导致崩溃,最后发现确实是这样的原因,不过问题是,很多时候这样的写法并不会造成崩溃,可见这样的Bug是偶现的。

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

把for- in 循环修改为 for 循环即可。

3.正常的网路请求突然出错

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

那是因为我在父类中的 viewWillDisappear 中调用了上述方法, 忽略了 VC的生命周期造成的问题, 因为在 V2的 ViewDidLoad中发起的网路请求会在 V1 的viewWillDisappear中被取消,所以就会出现上面的Bug。 正确的方法是在 父类中的viewDidDisappear 调用上述的方法即可。

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

这个问题是因为,父类和子类有一个相同名称的属性。 编译器自动给属性delegate合成getter和setter的时候将会在它的父类上实现,也就是说其父类也有一个delegate属性,现在它不知道到底是哪一个delegate.

所以遇到这个问题怎么解决?在子类中显式的声明一个@synthesize name = _name;就好,这样子类就会如愿的产生他的壳,编译器也不纠结了。

5.一个匪夷所思的Bug

两个工程中同样的代码,一个可以执行Post请求,一个不可以,我一直以为是 网路请求设置出了问题,因为一直报的是网路请求错误,貌似跟服务器无关。

 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?   
参数:{"sysuserid":"20180111134320122911","fopinion":"ok","fresult":"2","fwarnType":"IvFoodSalemas","fid":"43767","fwarnId":"303381"}

纠结了很久,最后实在没办法了,就打印了两个请求中的参数,发现只有 sysuserid 这个参数不一样,貌似还是长度不一样造成的,难道因为参数的原因可以造成这样的网络请求错误??最后试了一下,还真是参数的问题,把参数换成短的那个,就请求成功了,涨姿势了。

6.多层级文件夹拖进Xcode 工程中出错

这里说下两种错误的操作: (1)直接把多层级的文件拖到工程中 (2)add file 到工程中时选择的文件夹不在工程中(比如在桌面)

【1】这里上面两个操作的最终效果都是只是引用了文件夹中的文件,当文件所在处的文件被删除时,新工程中的对应文件就会变成红色, 【2】或者在新工程中修改文件,修改的相当于原工程中的文件,原工程中的文件自然会被修改了。

正确的操作是:先把需要添加的文件夹拷贝并移动到新工程文件夹中,然后右键 add file 到工程即可实现多层级文件夹的添加,而且不会出错。

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 这个错误,可以这么说,90%的错误来源在于对一个已经释放的对象进行release操作(code=1,是已经释放的对象又进行释放;code=2,是对已经释放完的,即计数为零的对象又进行使用——个人理解)。

开启僵尸模式,这个模式比较耗性能,一般Degub的时候可以使用,打包发布的时候注意取消这个模式。

最后发现 baseItem[i] 在事先声明中不多,比 viewClassArray 的个数少了很多,最后造成了这个内存错误。

8. &&的条件语句判断中出错

if (baseItem[i].isMust&&(NilStr([baseItem[i] itemText]) ||[baseItem[i].itemText isEqualToString:@"-请选择-"])) {
                return YES;
            }

这个条件判断中有时候会出现前面成立后面不成立,但是整个判断是成立的错误状态,这个出错是偶然的,不知道什么原因,反正 && 两边都用 ()包裹住,这样更不容易出错。

9.一个UITbaleViewCell中下拉框的初始化失败的Bug

修复过后的理想效果

场景:下拉框是在cell中初始化的,下拉框的初始化方法在 VC中,而且下拉框的初始化事件是利用 UIResponder 传递的。

问题:第一个cell初始化的时候,里面的下拉框的初始化失败,因为VC中的对应的初始化事件并没有被调用,后续添加cell时,cell中的下拉框还是初始化失败,但是滚动UITbaleView 、或者 reLoad UITbaleView时却可以正常的触发,猜想是UITbaleView 初始化时,或者insertRowsAtIndexPaths 添加的cell在 cellForRowAtIndexPath 后才加载在UITbaleView上,所以在cellForRowAtIndexPath 的 setModel初始化时UIResponder是找不到其父视图的。

解决办法:把VC中的下拉框初始化方法移到 Cell中,这样就不会出现上述的问题了。而且移到cell中后详情和新增页面中都不用管理下拉框初始化方法了,更合理。

10.一个 OS_dispatch_data 有关的网路请求

【1】首先这个网络请求(http://XXXXXXXX:80XX/WebServiceServlet?method=getAllResourceDetailByOrg&orgCode=7654)只支持GET请求,POST请求没有数据返回也是奇葩。 【2】OS_dispatch_data 不能用 JSON直接解析,是无法直接使用的。 【3】需要把 OS_dispatch_data 转为 字符串,字符串去掉首尾非JSON的字符后,剩余的部分就可以使用 JSONKit 进行解析了。

 //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 即为可以使用的数组数据了。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:https://www.jianshu.com/u/aef519a9dde7复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 扒虫篇-Bug日志 Ⅲ

    解决方法:可能是由于粘贴网页上的代码的时候两行之间的回车引起的,有未识别的回车或者换行,找到,删除掉就 OK了。

    進无尽
  • 扒虫篇-Bug日志 Ⅵ

    试了试其他的账号也是一样,在账号密码没有输入错误的情况下还是登陆不上。 解决办法:重启电脑就解决了。

    進无尽
  • 扒虫篇-Bug日志 Ⅰ

    之前在集成调试 AsReader的时候,遇到的bug,是一家日本企业生产的产品,官方文档比较简单而且还不写清楚,表面上看是报的不兼容 64位模拟器的错误,我用...

    進无尽
  • 扒虫篇-Bug日志Ⅳ

    解决办法:other linker flag -ObjC 造成的,有些时候设置other linker flag 为-ObjC会出现多次导入的报错。

    進无尽
  • 扒虫篇-Bug日志 Ⅱ

    事情是这样的:一个风和日丽的下午,我正在 itunesConnect 中注册一个APP,基本信息都保存了,在编辑版本信息时,都弄的差不多了,可是没有保存,结果不...

    進无尽
  • 扒虫篇-Bug日志 Ⅶ

    解决办法:iphone 上已经装了标示符一样的APP ,删掉老版本 重新安装即可。

    進无尽
  • 扒虫篇-Bug日志Ⅴ

    解决方法:首先这个警告不会造成上传失败,也不会造成审核被拒。其次可以通过移除代码中警告的那些代码,并移除多余不使用的系统类库(framework),使警告消失。

    進无尽
  • 扒虫篇- Bug日志 Ⅹ

    完成以下措施后依然无效: 1、Xcode完全退出后重新打开 2、清理缓存 Xcode 缓存目录: /Users/你的用户名/Library/Develo...

    進无尽
  • 扒虫篇- Bug日志 Ⅷ

    不执行的原因是 在VC中使用这个ImageUploaderManager时,需要设置为全局变量,如果是局部变量的话,很快会被销毁掉,其中的代理自然不会执行了。

    進无尽
  • 扒虫篇-崩溃日志解读及Crash收集

    崩溃是让发人员比较头痛的事情,app崩溃了,说明代码写的有问题,这时如何快速定位到崩溃的地方很重要。调试阶段是比较容易找到出问题的地方的,但是已经上线的app并...

    進无尽
  • 扒虫篇-Debug几个实用的方法

    Bebug调试程序是开发中最常见的问题,对于一些简单有效的调试技巧的了解是很有必要的。这篇文章就列举Debug中用到的一些简单的技巧。

    進无尽
  • 扒虫篇-此构建版本无效

    一个公司的项目 1.0 版本被苹果拒绝了,问题修改好,再次上传后,构建版本时,发现上传的版本都是提示:此构建版本无效。

    進无尽
  • 扒虫篇-苹果审核被拒原因小汇

    很多时候,我们的美美滴开发完了,并测试完成之后准备打包上传到APPStore,却发现被拒绝了,各种各样的理由让我们触不及防,一直想整理汇总一下却一直因为各种事耽...

    進无尽
  • 扒虫篇 - 定位授权前地图定位造成的黑屏

    公司一款App使用到了地图定位,可是从AppStore下载下来后,第一次安装完后出现了黑屏的现象。

    進无尽
  • 扒虫篇-使用Xcode8上传到AppStore 无法构建版本 没有➕号

    由于公司产品需要上架,在准备好相关文件后,就火速设置好itunsConnect里面的内容,使用Xcode8火速上传 ipa文件到 AppStore后就开心的准备...

    進无尽
  • 扒虫篇-一次被AppStore多次拒绝的经历和常见被拒原因(持续更新)

    最近项目要上线了,可是因为用到了后台模式,一直被拒,(其中还包含了其他原因的被拒),所以打算纪录一下,希望能帮到有同样问题的朋友,也对常见被AppStore拒绝...

    進无尽
  • Y2K——百年一遇的BUG

    大家不要小瞧这一篇文章,这个bug真的是百年才能一遇呢,所以还是耐心的看完本篇文章吧!

    Tom2Code
  • 星际虫王IA退役2年搞AI,现在自叹不如了

    金磊 发自 凹非寺 量子位 | 公众号 QbitAI 这年头,直播讲AI,真算不上什么新鲜事。 但要是连职业电竞选手,都开播主讲呢? 没开玩笑,是真事。 这位...

    量子位
  • 个人主题建站首选微博秀模板,仿新浪微博官网

    很久之前就想弄这个仿微博的模板了,但是时间一直不允许,这不抽空弄出来了,主题简单明了,后台设置简单,无需复杂操作,比起以往的CMS主题要简单的多,太适合做个人博...

    雾海梦曦

扫码关注腾讯云开发者

领取腾讯云代金券