错误1
错误1导致原因
layout.itemSize = CGSizeMake(self.view.width, self.view.height - topViewHeight);
解决办法
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
return CGSizeMake(self.view.width, self.view.height - topViewHeight);
}
错误二: library not found for - 参考
解决方法:
获取 库文件所在的文件路径 ,添加到Target的Build Settings界面,如图:
错误三: Undefined symbols for architecture XXX: 参考
-
如果我们使用64位模拟器(iPhone simulators 5s 或更高版本)编译或者运行项目,就会报以下错误:
Undefined symbols for architecture x86_64:
-
如果我们使用32位模拟器(iPhone simulators 5 或更低版本)编译或者运行项目,就会报以下错误:
Undefined symbols for architecture i386:
原因之一:没有链接lib库而报错
解决方法:
但是我们怎么知道是没有链接libMobClickLibrary.a库而不是其他的什么库呢?这还要取决于这句"OBJC_CLASS$_MobClick", referenced from:。其中OBJC_CLASS$_MobClick中的MobClick就是我们引用的libMobClickLibrary.a中的一个文件。因为我真的是在AliyunSalesCustomerListTableViewManager.m中通过#import "MobClick.h"引用了MobClick.h,如下图:
有的时候,因为后面的类名跟第三方的库名没有任何相似处,比如库名叫做libAAA.a,而报错的类名却是BBB。此时,我们通过后面的类名根本不能准确的判断出这个BBB属于哪个库,也就不知道该链接哪个库。这种情况下,我们可以通过referenced from:提示后面的文件名来判断BBB到底属于哪个静态库,因为我们自己的某个类文件不太可能import很多第三方的库,这种情况下,采取这种方式比较好判断。
- 总结:综上,我们可知:项目中如果用到了某个第三方静态库,但lib静态库或者framework静态库没有被链接时,就会遇到Undefined symbols for architecture XXX这一类的错误。
- 原因:编译项目时,因为静态库没有链接进工程,所以静态库就不会参与编译,而项目某些文件(.m文件)又引用(或者说依赖)了静态库,所以自然会报错,而报的错就是经典的 Undefined symbols for architecture XXX这一类的错误。
- 解决方案:下次遇到这类问题,我们只需要在Linked Frameworks and Libraries 中添加指定的静态库即可!
原因之二:没有链接.framework静态库而报错
解决方法同原因一
原因三: extern引用不存在的全局变量而报错
在appDelegate中定义的全局变量
在viewController.m 文件中使用
image.png
错误产生的原因: 变量名写错了
image.png
错误四
iOS 11 隐藏navigationBar 之后, 偏移statusBar的距离
解决办法
if (@available(iOS 11.0, *)) {
self.iCollectionView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
} else {
self.automaticallyAdjustsScrollViewInsets = NO;
}
错误五
[Common] _BSMachError: port 7c13; (os/kern) invalid capability (0x14) "Unable to insert COPY_SEND"
_BSMachError: port 7c13; (os/kern) invalid name (0xf) "Unable to deallocate send right"
错误导致原因:
在UIAlertController 中 跳转系统设置界面时 产生该错误
解决方法:
// 方法一:
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
}
}];
// 方法二:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
}
});
错误六
在tableViewCell 上添加渐变的进度条时, 不出现 渐变层, 或者fram有问题
// 注意必需添加在 contentView上
[self.contentView.layer addSublayer:self.iGradientLayer];
// 必须设置绝对布局 对gradientLayer
- (void)setDefaultLayout {
// 因为 contentView的frame 在没有布局完成之前是拿不到frame的, 所以 gradientLayer的frame 要借助于 其他子视图的布局去设置
_iProgressView.frame = CGRectMake(kAspectWidth(81), kAspectHeight(kContentViewHeight) - kAspectHeight(28), kAspectWidth(kProgressViewWidth), kAspectHeight(kProgressViewHeight));
_iGradientLayer.frame = _iProgressView.frame;
}
如果添加在contenView的子视图上, 不是frame 不对,就是 显示不出来
希望有更好方法的人,给我提供点建议
持续更新中...
网友评论