一句话笔记(18)

一句话笔记,某段时间内遇到或看到的某个可记录的点。 2017-03-14

  • 注意 某些方法的 执行顺序
  • UITapGestureRecognizer 点击事件偶尔失效
  • [NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class 错误
  • 设置同一个色值时,显示颜色却不同 ?
  • 什么情况下读取 [AccountManager sharedManager].accountModel.userID 会为空
一、注意 某些方法的 执行顺序
 if (self.testBlock) {
      self.testBlock();
 }
 [self dismissViewControllerAnimated:YES completion:^{}];
[self dismissViewControllerAnimated:YES completion:^{
      if (self.testBlock) {
          self.testBlock();
      }
}];
[self dismissViewControllerAnimated:YES completion:^{}];
if (self.testBlock) {
      self.testBlock();
}

上述三者在执行某个问题时,也许效果一样,第二种会有点卡顿,第一种和第三种基本一样,但是一定注意第一种的执行顺序,有时这样写会遇到某种意想不到的BUG,可能外部调用时也会写 [self dismissViewControllerAnimated:YES completion:^{}];, 但是实际上可能的是 那个 self 还没有被释放掉,而导致问题啦。

另外注意 第二种和第三种的方法不一样,至于使用哪一种看具体需求情况。

dismissViewControllerAnimated:

毕竟这个Block 里面的执行时间是在 viewDidDisappear 之后的。

二、UITapGestureRecognizer 点击事件偶尔失效

在某个界面直接添加 UITapGestureRecognizer 发现其偶尔会失效,而且这个概率还比较高,但一时确实找不到原因。。。

后来发现是其实是我点击错了,想想以后遇到改问题不要死扣。。。

另外,也要注意常规失效的情况:

  • 父视图的 userInteractionEnabled 交互事件没有开启
  • 子视图超出父视图的范围
  • 设置 UITapGestureRecognizer 的代理事件中进行了阻拦
    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
      if () {
            return NO;
      }
    

}




>#####三、[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class 错误


![错误的图片](http://upload-images.jianshu.io/upload_images/784630-d4b9ff3ae0954eab.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

其实从图片中打印的信息就可以直接 看出来,指的是无法解码, 因为某个 Key 不存在,在我们此处 CategoryModel == > GBCategoryModel 导致出错的,对于此类问题场景应该是改动归档啦,所以有两种解决方法:
* 当例如 CategoryModel == > GBCategoryModel  切换后,直接先删除该路径
* 或者 说对之前 CategoryModel 此处做兼容处理。

PS: 以前对这类问题,会有点懵,最近发现对这种问题,其实只要细细看打印出的消息,看懂了基本上解决了一大半。


>#####四、设置同一个色值时,显示颜色却不同 ?

这个问题是在 我设置一个线条颜色 和 字体颜色时,设置同一种颜色,却是现实颜色不一样,不知道啥情况,很是郁闷...

![同一个色值,但是该人感觉确不一样](http://upload-images.jianshu.io/upload_images/784630-b9bdb994eee1031a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

就例如上述,给的都是同一个色值,但是展示的效果却是不一样。

self.testView.backgroundColor = [UIColor orangeColor];
self.testLabel.textColor = [UIColor orangeColor];


暂时想到一个取巧的方法, 从色觉效果看上去会是接近一些的

self.testView.backgroundColor = [[UIColor redColor] colorWithAlphaComponent:0.9];
self.testLabel.textColor = [UIColor orangeColor];

但是木有正规理由,如有朋友有正确的方法设置,让其显示的从色值上一样,欢迎告知。
PS: 这个问题在 模拟器上测试特别明显,在真机上差距会小一些。



>#####五、什么情况下读取 [AccountManager sharedManager].accountModel.userID 会为空

这个问题是我们后台突然跑过来说,我们某个接口的 userId 传入的是空,然而我很意外的是我们此处只有登录状态下才会跑这个接口,同时我们都是直接读取的  [AccountManager sharedManager].accountModel.userID  的值,为什么会为空?

正常跑的情况下,跑到那个接口处已经经历几个接口才到那,而前面的几个接口必然也要传 userID,而到那接口时,是突然的读取该值失败。 或者是说,有人恶意单独跑这个接口。

然后下面好好想想,什么情况下会读取值失败,而且是突然的
* 第一反应是崩溃的情况下,然而应该不是,否则数据不能上传到后台
* 第二,在想这个值是怎样保存的,发现是 NSCoding 实现的 也应该是没有问题的

暂时一下确实没有想到什么情况下,会突然读取不到该值的情况 ? 如有朋友知道麻烦告知。

你可能感兴趣的:(一句话笔记(18))