美文网首页
常见错误

常见错误

作者: foolish_hungry | 来源:发表于2018-06-13 12:29 被阅读0次

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

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

    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中定义的全局变量

    image.png
    在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 不对,就是 显示不出来

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

    持续更新中...

    相关文章

      网友评论

          本文标题:常见错误

          本文链接:https://www.haomeiwen.com/subject/ysyqhftx.html