常见问题(二)

目录

  1. 程序卡在某个界面不动
  2. Multiple commands produce问题
  3. YYLabel 不显示
  4. performSelector:withObject:afterDelay:最好成对出现
  5. 视图不显示
  6. 获得数字的每一位, 并用数字图片来显示
  7. has copy command from ".../AFNetworking/LICENSE"
  8. 联通4g可以显示图片, 移动4g不可以显示图片

1. 程序卡在某个界面不动

如果内存不高, 往往是线程死锁引起的, 可以点击 Xcode 的 "Pause program execution" 按钮


常见问题(二)_第1张图片
莫名卡死@2x.png

show the debug navigator 页面查看当前线程的使用情况

常见问题(二)_第2张图片
线程分析.png

可以看出是在添加 ijkplayer 的时候出现的问题.

2. Multiple commands produce问题

错误问题简化如下:

Showing Recent Messages :-1: Multiple commands produce '.../Info.plist': 1) Target 'UserHomepageBaseView' (project 'UserHomepageBaseView') has copy command from '.../JHChainableAnimations/Info.plist' to '.../Info.plist' 2) Target 'UserHomepageBaseView' (project 'UserHomepageBaseView') has copy command from '.../Network/Info.plist' to '.../Info.plist' 3) Target 'UserHomepageBaseView' (project 'UserHomepageBaseView') has process command with output '.../Info.plist'

可以看到 JHChainableAnimations 和 Network 的 info.plist 文件的问题, 解决方案如下:
根据提示信息,选中对应的target-> Build Phases -> Copy Bundle Resource -> 移除所有Info.plist

3. YYLabel 不显示

  1. 只要 YYLabel 的宽高比需要的宽高小, 就会导致文字显示不全的问题.
  2. 如果 YYLabel 的四个约束没有全部确定好, 也会不显示.
  3. YYLabel 最擅长在富文本中加载图片等附件, 普通的文本字符, 最好直接用 UILabel.

4. performSelector:withObject:afterDelay:最好成对出现

  1. 在使用 performSelector:withObject:afterDelay: 对象方法后, 一定要在 dealloc 中 使用 cancelPreviousPerformRequestsWithTarget 类方法来停止掉延迟执行的方法
  2. 在使用 performSelector:withObject:afterDelay: 对象方法前, 最好也使用cancelPreviousPerformRequestsWithTarget 类方法来防止重复的操作.

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(removeGiftPkView) object:nil];
[self performSelector:(@selector(removeGiftPkView)) withObject:nil afterDelay:5];

5. 视图不显示

一, 思考过程如下:

  1. 通过层次结构图, 没有发现未显示的视图.
  2. 可以通过打印日志的方式, 查看视图及其父视图的基本信息有没有异常.
  3. 可以通过在未显示视图的对象的 dealloc 方法中, 断点检测其调用时机

二, 结果

  1. 正常情况下, 视图是可以显示的. ==> 视图有可能被移除了.
  2. 通过打印其和其父视图, 发现其父视图的 frame 是 CGRectZero, 正常显示的情况下是有内容的. ==> 父视图有可能被 removeFromSuperview了, 但是没有及时释放
  3. 通过对比正常情况和出问题的情况, 发现出问题的情况有没有预料到的 type, 会出现走如下 switch default case, 导致父视图被移除掉.
        default:
        {
            [self removeFromSuperview];
        }
            break;

6. 获得数字的每一位, 并用数字图片来显示

  1. 方法一: 按位数取余, 根据数字的内容读取图片数组的内容.
  2. 方法二:
  1. 把数字用字符串包起来, 使用 NSString 对象的 substringWithRange:方法, 依次获取每一位的内容.
  2. 要想制作一个类似于UILabel 一样的数字展示器, 可以先确定好要显示的最大位数 N, 在初始化时就创建 N 个UIImageView 视图, 根据显示方式(左/右对齐)确定每个空UIImageView的排列顺序.
  3. 在给数字展示器赋值时, 读取数字字符串的每一位, 设置图片的内容.

7. xcode10 has copy command from ".../AFNetworking/LICENSE"

  1. XCode10 中如果导入了多余的 LICENSE 文件或 README 文件, 需要全部删除.
  2. 使用快捷键command + 1切换到文件视图, 在底部 filter 中, 输入 LICENSE 或 README 即可快速找到, 使用delete删除move to trash即可.
Showing Recent Messages
:-1: Multiple commands produce '/Users/xxx/Library/Developer/Xcode/DerivedData/xxx-dkhavktdjuzktebrdrlqrjqansdf/Build/Products/Debug-iphonesimulator/xxx.app/LICENSE':

1) Target 'xxx' (project 'xxx') has copy command from '/Users/xxx/Documents/Test/Tools/AFNetworking/LICENSE' to '/Users/xxx/Library/Developer/Xcode/DerivedData/xxx-dkhavktdjuzktebrdrlqrjqansdf/Build/Products/Debug-iphonesimulator/xxx.app/LICENSE'

2) Target 'xxx' (project 'xxx') has copy command from '/Users/xxx/Documents/Test/Tools/MBProgressHUD/LICENSE' to '/Users/xxx/Library/Developer/Xcode/DerivedData/xxx-dkhavktdjuzktebrdrlqrjqansdf/Build/Products/Debug-iphonesimulator/xxx.app/LICENSE'

3) Target 'xxx' (project 'xxx') has copy command from '/Users/xxx/Documents/Test/Tools/YYModel/LICENSE' to '/Users/xxx/Library/Developer/Xcode/DerivedData/xxx-dkhavktdjuzktebrdrlqrjqansdf/Build/Products/Debug-iphonesimulator/xxx.app/LICENSE'

8. 联通4g和 WiFi 下可以显示图片, 移动4g不可以显示图片

  1. 初步判断是移动4g图片下载失败.
  2. 由于没法用 Charles 抓包查看, 只能通过打印日志来看到图片地址, 并查看错误信息.
  3. 分别在联通4g 、移动4g、WiFi 下, 使用浏览器打开图片地址, 发现移动4g 下图片依旧没法打开.
  4. 推断是北京移动访问服务器时, 域名对应的服务器 ip 是无法访问的.

你可能感兴趣的:(常见问题(二))