1. Duplicate interface definition for class 错误
本来以为是文件重复导入,就全部搜了一下没有找到。找到
搜索工程文件
没有找到多余的文件。
搜索代码看一下
也没有发现多次@interface定义的。
搜索Build Phases
还是没发现异常。
最后就删除工程的 重新导入还是抱错。
没办法用全能搜索。
果然发现两处 因为我今天我用 AppCode 挪动了代码 估计是之前源文件没有删除的缘故
删除源文件 错误消除
从上面的错误可以看出 编译的过程不是取决于工程引入的文件 而是相对于工程目录下面的所有文件进行编译的。
2 怎么让试图最顶端从状态栏开始
@property(nonatomic,assign) UIRectEdge edgesForExtendedLayout NS_AVAILABLE_IOS(7_0); // Defaults to UIRectEdgeAll
设置edgesForExtendedLayout 为UIRectEdgeNone
3 怎么剪切 Mac 上面的文件
-
Command+C
复制文件 -
Command+Option+V
就可以剪切刚才的文件了
参考资料:终于知道mac下剪切文件的快捷键了
4.设置 UITableViewCell 自带 ImageView 的位置
网上说只可以用过 - (void)layoutSubViews 设置
- (void)layoutSubviews {
[super layoutSubviews];
self.imageView.frame = CGRectMake(320 - 44, 0, 44, 44);
self.imageView.backgroundColor = [UIColor blackColor];
}
我们应用出现的界面
Demo 的界面
我们工程的界面位置整体偏移了 暂时没找到问题所在
暂时解决方法两种
- 自己新加一个 UIImageView 布局
- 重新设置文字 线 图片位置
4 关于 UIViewController 是先执行属性赋值 还是先走 ViewDidLoad 的方法
今天做了一个界面 加了一个属性 在 ViewDidLoad 使用属性发现竟然为nil
断点发现 ViewDidLoad 比属性先走。
对于之前做的都是先走属性 再走 ViewDidLoad
对比之前的代码 发现我之前布局都是写在 ViewDidLoad 现在写在初始化方法
我就屏蔽了初始化的代码
运行先走属性赋值 再走 ViewDidLoad
设置属性和 ViewDidLoad 的顺序决定设置界面代码的顺序
5 关于 HTTPS 加密 开启还是可以请求 http 的数据问题
设置NSAllowsArbitraryLoads为 NO
发现模拟器对于 HTTP 的请求还是可以请求到数据
最后发现在真机会提示"The resource could not be loaded because the App Transport Security policy requires the use of a secure connection"
关于 HTTPS 加密限制流程图
参考资料:iOS 10 适配 ATS(app支持https通过App Store审核)
6、注意 某些方法的 执行顺序
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 还没有被释放掉,而导致问题啦。
另外注意 第二种和第三种的方法不一样,至于使用哪一种看具体需求情况。
毕竟这个Block 里面的执行时间是在 viewDidDisappear 之后的。