开发中遇到的坑和部分心得3

1.iOS国际化

iOS国际化传送门

2.AutoLayout关于更新的几个方法的区别:

setNeedsLayout:告知页面需要更新,但是不会立刻开始更新。执行后会立刻调用layoutSubviews。
layoutIfNeeded:告知页面布局立刻更新。所以一般都会和 setNeedsLayout一起使用。如果希望立刻生成新的frame需要调用此方法,利用这点一般布局动画可以在更新布局后直接使用这个方法让动画生效。
layoutSubviews:系统重写布局
setNeedsUpdateConstraints:告知需要更新约束,但是不会立刻开始
updateConstraintsIfNeeded:告知立刻更新约束
updateConstraints:系统更新约束

3.Position and height are ambiguous for XXX 错误

今天在编码的时候碰到了这样一个错误,找了好久都找不到问题所在,试了好多办法,最后把控件的约束全部删除重新添加一遍就可以了。这个应该是Xcode的Bug。

4.开发的时候碰到这样一个需求,需要拖动选择数量,并且在拖动的过程中变换当前被选中的数字的颜色和大小。

于是博主利用UIcollectionView+UICollectionViewFlowLayout实现了下图效果。如果你也需要实现类似效果可以前往我的个人github下载。如果能够帮到你希望能给博主点上星星,谢谢支持_

开发中遇到的坑和部分心得3_第1张图片
collectionView拖动选择器.gif

如果你是iOS新人或者是之前没有用过这个控件的开发者,那么博主推荐一篇对该控件介绍相对比较详细的 文章.UICollectionView很强大,非常有必要深入学习。

5.在导入使用第三方库的时候发现libsqlite有libsqlite3.dylib和libsqlite3.dylib两个库,他们到底有什么区别呢?

libsqlite3.dylib本身是个链接,在这里它指向libsqlite3.0.dylib。也就是说在这里你添加libsqlite3.dylib和添加libsqlite3.0.dylib其实是添加了同一个文件,没有区别,那为什么要添加libsqlite3.dylib呢?原因在于libsqlite3.dylib总是指向最新的sqlite3动态库,也就是说如果出现了新的动态库(如:libsqlite3.1.dylib)那libsqlite3.dylib将指向这个新的动态库(libsqlite3.1.dylib)而不在是libsqlite3.0.dylib了!

6.does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target.

最近在新建工程想要进行真机调试的时候发现报了这样一个错误,这个是因为在xcode7之后Xcode新增了一个功能就是给在程序打包的时候对程序里面的代码进行“瘦身”处理。bitcode是被编译程序的一种中间形式的代码。包含bitcode配置的程序将会在App store上被编译和链接。bitcode允许苹果在后期重新优化程序的二进制文件,而不需要重新提交一个新的版本到App store上。但是这就要求程序里面的所有第三方代码都需要满足支持bitcode。如果你还是想要保留这个第三方那么你可以在Xcode的”Build Settings”->”Enable Bitcode”选项中将其设置为NO。

开发中遇到的坑和部分心得3_第2张图片
配置图片.png

7.控制器在跳转的时候有push和modal两种方式,push多层的时候我们能够用

[self.navigationController popToRootViewControllerAnimated:YES];来实现跳转到根控制器,但是你是否考虑过如果是modal的情况下怎么跨级跳转呢?
经过一顿操作博主找到了以下方法:

//.presentingViewController能够拿到跳转到自己的ViewController,所以想跳多少层就跳多少层,只要修改presentingViewController的个数。
//实验发现modal最底层是通过UITabBarController来实现的。- -
UIViewController *vc = self.presentingViewController.presentingViewController.presentingViewController;
[vc dismissViewControllerAnimated:YES completion:nil];
8.给大家分享几个加密分类

百度云盘地址
密码:8pkk

开发中遇到的坑和部分心得3_第3张图片
加密分类.png
9.给大家分享一个比较详细的地址plist文件。

百度云盘地址
密码: rqr6

开发中遇到的坑和部分心得3_第4张图片
中国省市区plist文件.png

10:使用XIB可以加快开发速度,除了拖控件,还可以在XIB中直接把手势添加到某个控件上面,剩下不少垃圾代码的编写,实在方便.但是,方便中有也有一些坑等着你踩.我习惯用[[[NSBundle mainBundle]loadNibNamed:NSStringFromClass([self class])owner:nil options:nil] lastObject]来加载XIB,所以,我遇到了一个坑,异常信息为:

reason: 'invalid nib registered for identifier (WMNearByFellowVCCellID) - nib must contain exactly one top level object which must be a UITableViewCell instance

再看下面的截图,资深人士应该知道原因了吧?


开发中遇到的坑和部分心得3_第5张图片
Paste_Image.png

其实,当你在XIB中添加手势(无论添加给谁),它就是一个文件的了,所以,你加载文件,就有可能加载到了手势,而不是cell,所以就会出现上面的异常.
解决方式:使用[[[NSBundle mainBundle]loadNibNamed:NSStringFromClass([self class])owner:nil options:nil] firstObject]加载XIB,并且不能通过注册的方式来做cell的循环利用.

最近发现一个问题,我在xcode控制台打印输出的时候,并不能直接打印属性的值了,这让我很惆怅,报错信息如下:

error: instance method 'left' has incompatible result types in different translation units ('CGFloat' (aka 'double') vs. 'MASViewAttribute *')
instance method 'left' also declared here
error: instance method 'top' has incompatible result types in different translation units ('CGFloat' (aka 'double') vs. 'MASViewAttribute *')
instance method 'top' also declared here
error: instance method 'right' has incompatible result types in different translation units ('CGFloat' (aka 'double') vs. 'MASViewAttribute *')
instance method 'right' also declared here
error: instance method 'bottom' has incompatible result types in different translation units ('CGFloat' (aka 'double') vs. 'MASViewAttribute *')
instance method 'bottom' also declared here
error: instance method 'width' has incompatible result types in different translation units ('CGFloat' (aka 'double') vs. 'MASViewAttribute *')
instance method 'width' also declared here
error: instance method 'height' has incompatible result types in different translation units ('CGFloat' (aka 'double') vs. 'MASViewAttribute *')
instance method 'height' also declared here
error: instance method 'centerX' has incompatible result types in different translation units ('CGFloat' (aka 'double') vs. 'MASViewAttribute *')
instance method 'centerX' also declared here
error: instance method 'centerY' has incompatible result types in different translation units ('CGFloat' (aka 'double') vs. 'MASViewAttribute *')
instance method 'centerY' also declared here
warning: property access result unused - getters should not be used for side effects

导致这个问题的原因我在网上找了好久,网上大多说是分类里面有重复的方法导致了这个警告,但是我发现旧版本就有分类方法名重名的情况但是却并没有报出这种错误,经过对SVN版本号的对比我最终定位到了问题起源的版本号,仔细对比代码之后发现改过DEBUG_INFORMATION_FORMAT = dwarf;为DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
。这就是问题的根本所在,只需要恢复配置为DEBUG_INFORMATION_FORMAT = dwarf;即可。
下面是对于这两个配置的官方说明:

DWARF - Object files and linked products will use DWARF as the debug information format. [dwarf]
DWARF with dSYM File - Object files and linked products will use DWARF as the debug information format, and Xcode will also produce a dSYM file containing the debug information from the individual object files (except that a dSYM file is not needed and will not be created for static library or object file products). [dwarf-with-dsym]

你可能感兴趣的:(开发中遇到的坑和部分心得3)