常见错误

错误1

常见错误_第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界面,如图:

常见错误_第2张图片
image.png

错误三: 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,如下图:

常见错误_第3张图片
image.png

有的时候,因为后面的类名跟第三方的库名没有任何相似处,比如库名叫做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中定义的全局变量

常见错误_第4张图片
image.png

在viewController.m 文件中使用
常见错误_第5张图片
image.png

错误产生的原因: 变量名写错了
常见错误_第6张图片
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 不对,就是 显示不出来

希望有更好方法的人,给我提供点建议

持续更新中...

你可能感兴趣的:(常见错误)