iOS 开发小贴士

开发过程中或多或少会碰见一些问题和纪要,感觉有必要记下来,避免下次再犯,此文章后续会更新...

  1. iOS app通过itunes共享文件
    在程序的配置文件中添加Application supports iTunes file sharing,设置为YES;这里共享的是沙河的Document目录

  2. DZNEmptyDataSet使用心得
    同mj刷新一起使用的时候,一定要先endrefresh方法,然后再去刷新tableview,因为DZNEmptyDataSet是在reload数据的时候获取tableview的偏移和bounds,然后去设置空视图的位置的,如果先reload,则会导致空视图空视图显示出来的时候往上偏了54像素,54从哪里冒出来的呢?全局搜了一下,发现mj刷新正在pulling的时候正好54。

  3. 个人认为开发中涉及到系统权限的应该统一放在一起,放在一个文件中。

  4. CocoaLumberjack 自定义logger输出样式

    1. 首先自定义一个类似DDLogFileFormatterDefault的formatter作为格式输出,实例化一个fomatter;
    2. 自定义一个ddloger,继承于DDAbstractDatabaseLogger,重载db_log、db_save,添加post服务器方法;将第一步创建的formatter赋值给ddloger的formatter属性;
    3. nslog打印

    注意:
    DDLog:基础类,必须引入的。
    DDASLLogger:支持将调试语句写入到苹果的日志中。一般正对Mac开发。可选。
    DDTTYLogger:支持将调试语句写入xCode控制台。我们即使要用它。可选。
    DDFileLogger:支持将调试语句写入到文件系统。可选。
    DDLog的输出级别默认提供以下若干种:
    DDLogError:定义输出错误文本
    DDLogWarn:定义输出警告文本
    DDLogInfo:定义输出信息文本
    DDLogDebug:定义输出调试文本
    DDLogVerbose:定义输出详细文本

    提供的日志级别为:
    LOG_LEVEL_ERROR:只显示错误日志。
    LOG_LEVEL_WARN:包括:LOG_LEVEL_ERROR
    LOG_LEVEL_INFO:包括:LOG_LEVEL_WARN
    LOG_LEVEL_DEBUG:包括:LOG_LEVEL_INFO
    LOG_LEVEL_VERBOSE:包括:LOG_LEVEL_DEBUG
    LOG_LEVEL_OFF:关闭日志
    level = LOG_LEVEL_VERBOSE的时候,以上所有的level的打印日志都会进行打印,在appdelegate中添加多少个logger,就会形成几种情况的日志,譬如:文件、数据库、控制台等,添加自定义的之后便会增加一种日志形式(自定义的上传给服务器的日志)
    问题:

    1. 日志文件logger只会存入error和warning的日志吗?
    2. 日志文件只有一个吗?如果不是,什么时候就会创建?
  5. category中添加成员变量
    .h

    @property (nonatomic, retain)   LBEmptyPageView * emptyView;
    @property (assign, nonatomic) BOOL  showNetError;
    
    static const void * emptyViewKey =  &emptyViewKey;
    
    @implementation BaseViewController  (EmptyDataSet)
    - (LBEmptyPageView *)emptyView {
    return objc_getAssociatedObject(self,   &emptyViewKey);
    }
    
    - (void)setEmptyView:(LBEmptyPageView *)emptyView {
      objc_setAssociatedObject(self,    emptyViewKey, emptyView,    OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    }
    
    - (BOOL)showNetError{
       return   [objc_getAssociatedObject(self, _cmd)   boolValue];
    }
    
    - (void)setShowNetError:    (BOOL)showNetError{
    objc_setAssociatedObject(self, @selector(showNetError), @(showNetError), OBJC_ASSOCIATION_ASSIGN);
    }
    

    category使用原则:

    1. category的实现可以依赖主类,但主类一定不依赖category,也就是移除一个category的代码不会对主类产生影响
    2. category可以直接食用主类已有的私有成员变量,但不应该为实现catecory而在主类中添加成员变量,考虑通过上述的方式实现。
  6. 在用xib自定义tableview的头部时候,有时会出现当我NSbundle实例化之后改变它的frame不管用,这个可能xcode的bug或者是缓存问题,删掉重新搞

  7. 之前碰到一个问题就是缺少库的问题,第一次显示缺AFNetWorking,我将AFNetWorking从cocoapods中删除手动添加之后,它又会报其它库的错误,一般这种问题就是因为路径的问题,这里奉上解决方法:library search path 设置:$(inherited)

  8. iOS7报错信息:Library not loaded: /System/Library/Frameworks/Photos.framework/Photos
    Referenced from: /var/mobile/Applications/E19A46C1-C0EC-4DC3-A9CE-DC84811DD7E8/xxxx.app
    Reason: image not found
    解决方案:You need to weak link Photos.framework, not ALAssetsLibrary! Xcode -> Targets -> YourTargetName -> Build Phases -> Link Binary With Libraries -> Set Photos.framework to Optional.

  9. 图片裁剪:可以实现美食杰启动页图片上下分开动画效果

CGImageCreateWithImageInRect(image.CGImage, CGRectMake(0, image.size.height *0.5, image.size.width, image.size.height *0.5))
  1. 播放GIF比较好的库:FlipBoard出品的FLAnimatedImage

  2. time profilter部分专词意思
    Separate by Thread:按线程分开做分析,这样更容易揪出那些吃资源的问题线程。特别是对于主线程,它要处理和渲染所有的接口数据,一旦受到阻塞,程序必然卡顿或停止响应。
    Invert Call Tree:反向输出调用树。把调用层级最深的方法显示在最上面,更容易找到最耗时的操作。
    Hide Missing Symbols:隐藏缺失符号。如果 dSYM 文件或其他系统架构缺失,列表中会出现很多奇怪的十六进制的数值,用此选项把这些干扰元素屏蔽掉,让列表回归清爽。
    Hide System Libraries:隐藏系统库文件。过滤掉各种系统调用,只显示自己的代码调用。
    Flattern Recursion:拼合递归。将同一递归函数产生的多条堆栈(因为递归函数会调用自己)合并为一条。
    Top Functions:找到最耗时的函数或方法。

  3. NSSortDescriptor
    通过它可以实现数组内模型根据某一个字段或者多个进行排序,示例代码如下:

//按年龄和名字排序,如果碰到年龄相等的,则根据名字排序
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"_age" ascending:NO];
NSSortDescriptor *sortDescriptorName = [[NSSortDescriptor alloc] initWithKey:@"_name" ascending:NO];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, sortDescriptorName, nil];
[_mutArrVideo sortUsingDescriptors:sortDescriptors];
```

  1. 获取数字数组中的最大项和最小项

NSArray * arr = [NSArray arrayWithObjects:@"10",@"50",@"9", nil];
NSInteger max = [[arr valueForKeyPath:@"@max.intValue"] integerValue];
```

  1. 非主线程执行UI操作检测工具
    PSPDFUIKitMainThreadGuard.m

  2. 奇怪矩阵
    控制台打印:

    <Error>: CGAffineTransformInvert: singular matrix.
    May 11 16:19:48  LBAssistant[4704] <Error>:     CGAffineTransformInvert: singular matrix.
    May 11 16:19:48  LBAssistant[4704] <Error>:     CGAffineTransformInvert: singular matrix.
    

    并且相机黑屏,但是拍到的照片是存在的,只是黑屏,
    bug猜测原因是:UIActionsheet的问题,更换自定义的就没事儿了,但心里还是觉得此问题不简单,另有他因,还待高人指点。

  3. cell计算高度卡顿
    xib布局的自定义cell第一次计算高度卡顿2s,其原因是:布局中lable使用了第三方字体(黑体),非系统字体

  4. brew update 出错:Error: /usr/local must be writable!​ 解决方案:

    sudo chgrp -R admin /usr/local
    sudo chmod -R g+w /usr/local
    
  5. 关于写入权限的问题

    sudo chown demoker /Library/Caches/Homebrew
    

    demoker 是你当前用户名,后面的是你受权限限制的文件目录

  6. 关于injectionforXcode 使用时碰到的问题

    1. 真机运行
      解决方法:在main.m或者.pch中添加👇代码:
      #ifdef DEBUG
          static char _inMainFilePath[] = __FILE__;
          static const char *_inIPAddresses[] = {"192.168.83.47", "127.0.0.1", 0};
          //👆两个声明可加可不加
          #define INJECTION_ENABLED
          #import "/tmp/injectionforxcode/BundleInjection.h"
      #endif
      
    2. Could not codesign as 'iPhone Developer':/Users/...

    tip_19.png

    issue图片中写得很清楚了证书到底是图中两个证书里面的哪一个,解 决方法就是修改iOSInjectionProject/x86_64/identity.txt 文件中证书为正 确的那一个即可,这样就可以使用这个插件了😄。[参考] (https://github.com/johnno1962/injectionforxcode/issues/41)

  7. synx 同步iOS工程目录
    Xcode下面直接创建Group时在本地项目文件夹中并不会形成实体文 件夹,通过synx可以将Group目录同步。使用:

    1. 安装
      sudo gem install synx
    2. 使用
      synx your path

CocoaPods管理的库要重新pod install一次,手动添加的Framework也要重新添加。

  1. Realm pod install 失败

[!] /bin/bash -c
set -e
sh build.sh cocoapods-setup

core is not a symlink. Deleting...
Downloading dependency: core 1.0.1
Downloading core failed:
curl: (56) SSLRead() return error -36
```
解决方法:
```rm -rf Pods```,删除工程目录下的pods文件夹,然后重新   pod install,安装Realm的时候会慢一些,等了很长时间...解决方     法  参考链接[🔗](https://github.com/realm/realm-cocoa/   issues/2713)
    
```
curl https://static.realm.io/downloads/core/realm-core-1.0.1.tar.bz2 -O
mkdir $TMPDIR/core_bin
mv realm-core-1.0.1.tar.bz2 $TMPDIR/core_bin
22. 子类是可以调用父类xib文件进行实例化的,例如LBWebViewController
23. sublime 插件安装方法:[链接](https://packagecontrol.io/installation#st3)
      1. 
```ctrl+ `
```,打开console,执行
```simple
```中的命令,即可
      2. 安装完
```package control.sublime-package
```,就可以安装其他插件了
      3. 
```shift+command+p
``` 找到
```install package
```命令,回车,然后输入需要安装的插件名称,再回车就可以了
24. realm pod 报错'object_schema.hpp' file not found 
     
    ```
    1. rm -rf Pods
    2. rm -rf ~/Library/Caches/CocoaPods
    ```


Done.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容