开发过程中或多或少会碰见一些问题和纪要,感觉有必要记下来,避免下次再犯,此文章后续会更新...
iOS app通过itunes共享文件
在程序的配置文件中添加Application supports iTunes file sharing
,设置为YES;这里共享的是沙河的Document目录DZNEmptyDataSet使用心得
同mj刷新一起使用的时候,一定要先endrefresh方法,然后再去刷新tableview,因为DZNEmptyDataSet是在reload数据的时候获取tableview的偏移和bounds,然后去设置空视图的位置的,如果先reload,则会导致空视图空视图显示出来的时候往上偏了54像素,54从哪里冒出来的呢?全局搜了一下,发现mj刷新正在pulling的时候正好54。个人认为开发中涉及到系统权限的应该统一放在一起,放在一个文件中。
-
CocoaLumberjack 自定义logger输出样式
- 首先自定义一个类似DDLogFileFormatterDefault的formatter作为格式输出,实例化一个fomatter;
- 自定义一个ddloger,继承于DDAbstractDatabaseLogger,重载db_log、db_save,添加post服务器方法;将第一步创建的formatter赋值给ddloger的formatter属性;
- 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,就会形成几种情况的日志,譬如:文件、数据库、控制台等,添加自定义的之后便会增加一种日志形式(自定义的上传给服务器的日志)
问题:- 日志文件logger只会存入error和warning的日志吗?
- 日志文件只有一个吗?如果不是,什么时候就会创建?
-
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使用原则:
- category的实现可以依赖主类,但主类一定不依赖category,也就是移除一个category的代码不会对主类产生影响
- category可以直接食用主类已有的私有成员变量,但不应该为实现catecory而在主类中添加成员变量,考虑通过上述的方式实现。
在用xib自定义tableview的头部时候,有时会出现当我NSbundle实例化之后改变它的frame不管用,这个可能xcode的bug或者是缓存问题,删掉重新搞
之前碰到一个问题就是缺少库的问题,第一次显示缺AFNetWorking,我将AFNetWorking从cocoapods中删除手动添加之后,它又会报其它库的错误,一般这种问题就是因为路径的问题,这里奉上解决方法:library search path 设置:$(inherited)
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.图片裁剪:可以实现美食杰启动页图片上下分开动画效果
CGImageCreateWithImageInRect(image.CGImage, CGRectMake(0, image.size.height *0.5, image.size.width, image.size.height *0.5))
播放GIF比较好的库:FlipBoard出品的FLAnimatedImage
time profilter部分专词意思
Separate by Thread:按线程分开做分析,这样更容易揪出那些吃资源的问题线程。特别是对于主线程,它要处理和渲染所有的接口数据,一旦受到阻塞,程序必然卡顿或停止响应。
Invert Call Tree:反向输出调用树。把调用层级最深的方法显示在最上面,更容易找到最耗时的操作。
Hide Missing Symbols:隐藏缺失符号。如果 dSYM 文件或其他系统架构缺失,列表中会出现很多奇怪的十六进制的数值,用此选项把这些干扰元素屏蔽掉,让列表回归清爽。
Hide System Libraries:隐藏系统库文件。过滤掉各种系统调用,只显示自己的代码调用。
Flattern Recursion:拼合递归。将同一递归函数产生的多条堆栈(因为递归函数会调用自己)合并为一条。
Top Functions:找到最耗时的函数或方法。-
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];
```
-
获取数字数组中的最大项和最小项
NSArray * arr = [NSArray arrayWithObjects:@"10",@"50",@"9", nil];
NSInteger max = [[arr valueForKeyPath:@"@max.intValue"] integerValue];
```
非主线程执行UI操作检测工具
PSPDFUIKitMainThreadGuard.m-
奇怪矩阵
控制台打印:<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的问题,更换自定义的就没事儿了,但心里还是觉得此问题不简单,另有他因,还待高人指点。 cell计算高度卡顿
xib布局的自定义cell第一次计算高度卡顿2s,其原因是:布局中lable使用了第三方字体(黑体),非系统字体-
brew update 出错:Error: /usr/local must be writable! 解决方案:
sudo chgrp -R admin /usr/local sudo chmod -R g+w /usr/local
-
关于写入权限的问题
sudo chown demoker /Library/Caches/Homebrew
demoker 是你当前用户名,后面的是你受权限限制的文件目录
-
关于injectionforXcode 使用时碰到的问题
- 真机运行
解决方法:在main.m或者.pch中添加
- 真机运行