ios开发中容易出现的问题

1.SDWebImage篇
[self sd_setImageWithURL:url placeholderImage:placeholdeerImage options:0 progress:
^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) ;
如果这个地方报错,高版本需要加NSURL * _Nullable targetURL,低版本则需要去掉
2.控件阴影篇
有时候发现给一个视图添加阴影的时候,效果根本显示不出来,找了好久都没找到原因,最后竟然发现是给视图加了这句话:
view.layer.masksTobounds = YES;导致的,去掉之后就会惊喜的发现阴影已经出来啦~~~~
附例子:UIView *shadowView = [[UIView alloc] initWithFrame:CGRectMake(ScreenX375(18), ScreenX375(8), SCREEN_WIDTH - ScreenX375(36), ScreenX375(132))];
//    shadowView.layer.masksToBounds = YES;
shadowView.layer.cornerRadius = ScreenX375(12);
shadowView.layer.shadowOffset = CGSizeMake(0, 4); //设置阴影的偏移量
shadowView.layer.shadowRadius = ScreenX375(16);  //设置阴影的半径
shadowView.layer.shadowColor = RGBACOLOR(0, 0, 0, 0.09).CGColor; //设置阴影的颜色为黑色
shadowView.layer.shadowOpacity = 1; //设置阴影的不透明度
shadowView.backgroundColor = [UIColor whiteColor];
[self addSubview:shadowView];

再加一句话:如果把其他控件加到设置阴影的视图上,子控件也会有阴影。所以要是不希望别的也有阴影,就别把控件加到设置阴影的视图上啦~~~

3.控件自适应高度篇
赋例子:CGSize size = [self.detailLabel.text boundingRectWithSize:
CGSizeMake(SCREEN_WIDTH-ScreenX375(40), MAXFLOAT) 
options:NSStringDrawingUsesLineFragmentOrigin     
attributes:@{NSFontAttributeName:Kfont(15)} context:nil].size;

其中self.detailLabel.text是需要根据这些文本来计算
CGSizeMake()设置的尺寸大小是当前控件的宽度和最大高度MSXFLOAT,之前一直以为是最大宽度:屏幕的宽度和最大高度,所以设置的时候一直会出现问题。
attributes:@{NSFontAttributeName:Kfont(15)}这个里面是写的控件的属性字体名称和大小,根据字体和文本来计算控件的高度

4.数组篇

被自己蠢哭了都,还一直遍历数组取出所有的内容,费劲巴拉的再拼接出来,最后发现数组自带的就有一种方法可以拼接。
上代码:

NSArray *array = @[@"1", @"2", @"3", @"4", @"5", @"6", @"7", @"8", @"9"];
// 将array中的所有元素组合成一个字符串,并用“,”分隔开。
NSString *str = [array componentsJoinedByString:@","];
5.导入三方框架出现"Unknown type name 'NSString'"错误

解决方法:在所在的项目pch文件把自己所#import的头文件做如下操作:

#ifdef __OBJC__
#import   .........
#endif

分析了一下,zipArchive库是C OC C++文件混编,pch文件加的头文件都是全局性的,当在C文件中#import是没有意义的,所以要用ObjC分开。

6.开发中variable is not assignable missing block的解决办法

当我们在block中调用局部变量的时候就会出现这样的错误提示,解决方法:
在声明局部变量的时候前面加上 static 即可:

static BOOL isHidden;
[XXXX   XXXX   ^{
    isHidden = YES;
}];
7.XXX.h file not fount 文件找不到
a.在Build Settings --> Framework Search Paths里面查看是否路径与实际路径一样不一样
b.https://www.cnblogs.com/niexiaobo/p/4923905.html
8.好用的三方

获取手机联系人:
LJContactManager(https://github.com/leejayID/LJContactManager)
视频播放:
SJVideoPlayer(https://github.com/leejayID/LJContactManager/tree/master/Demo)
上传图片或者GIF或者视频:
HXPhotoPicker(https://github.com/SilenceLove/HXPhotoPicker)
PYPhotoBrowser(https://github.com/ko1o/PYPhotoBrowser)
切换滚动视图:
JXCategoryView(https://github.com/pujiaxin33/JXCategoryView)
数据为空的时候的空白页面占位图:
LYEmptyView(https://github.com/dev-liyang/LYEmptyView)

9.数据类型为空时的判断
遇到一个很坑的地方,就是明明打印出来的类型为NSNUll,但是用[XXX  class] isKindOfClass:[NSNull class] 
判断就是会出现问题,最后换了一种方式:[[NSNull class] isEqual: XXX ]  算是解决了这个问题。
很费解,两种方法的意思难道不是一样的吗???
10.tableView的多选
可以结合模型使用:模型里加一个isSelect的BOOL属性,在didSelect方法里面SelectGroupNumAllModel * model = self.dataArray[indexPath.row];
model.isSelect = !model.isSelect;如果需要知道选中的哪些则可根据模型里是否选中来。
11.UIView的属性exclusiveTouch
默认是NO,这个属性其实是为了解决多个控件同时响应的问题,YES可以阻止同一个window中其他控件的响应,
比如我在一个界面里有两个按钮 A和B A是push到另一个界面,B是Pop到另一个界面,
如果同时点击就会同时出现push和pop的效果,如果设置这个属性为YES就可以避免这样的发生。
可以在AppDelegate中统一设置:[[UIView apparence] setExclusionTouch:YES];
12.CALayer的shouldRasterize
当shouldRasterize设成true时,开启shouldRasterize后,CALayer会被光栅化为bitmap,
layer的阴影等效果也会被缓存到bitmap中,等下次使用时不会再重新去渲染了。
实现圆角本身就是在做颜色混合(blending),如果每次页面出来时都blending,消耗太大,
这时shouldRasterize = yes,下次就只是简单的从渲染引擎的cache里读取那张bitmap,节约系统资源。
如果在滚动tableView时,每次都执行圆角设置,肯定会阻塞UI,设置这个将会使滑动更加流畅。
13.设置MBProgressHUD带网络进度
+ (void)showProgressWithProgress:(CGFloat)progress
{
    MBProgressHUD *hud = [MBProgressHUD     showHUDAddedTo:kKeyWindow animated:YES];
    hud.mode = MBProgressHUDModeAnnularDeterminate;
    hud.labelText = NSLocalizedString(@"Loading...", @"HUD loading title");
    hud.activityIndicatorColor = UIColorFromRGB(@"#ff791d", 1);
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        // 主线程刷新进度
        dispatch_async(dispatch_get_main_queue(), ^{
            hud.progress = progress;
            if (progress == 1.0) {
                [hud hide:YES];
            }
        });
        // 进程挂起5毫秒
        usleep(500);
       dispatch_async(dispatch_get_main_queue(), ^{
            [hud hide:YES];
        });
    });
}
14.数组的倒序排列
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"5",@"3",@"4",@"2",nil];
// 倒序
NSMutableArray *resultArr = (NSMutableArray *)[[array reverseObjectEnumerator] allObjects];// 倒序的结果为:2,4,3,5
15.选择照片英文显示修改为中文
1.在项目里添加中文简体语言
image.png
2.然后在info.plist里选择语言为中文
image.png
16.延时操作,返回主线程更新UI,动画过渡
1.延时操作
int64_t delayInSeconds = 10.0; // 延迟的时间
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

});
2.返回主线程更新UI
dispatch_async(dispatch_get_main_queue(), ^{

)};
3.动画过渡
[UIView animateWithDuration:1.0 animations:^{

}];
17.libc++abi.dylib`__cxa_throw
打全局断点时选择all时,如果调用的有播放器,会产生__cxa_throw异常
把打全局断点时exception选择的all改为Objective-C就会解决啦!
18.崩溃提示:Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <CALayerArray: 0x14df0bd0> was mutated while being enumerated.'
当程序出现这个提示的时候,是因为你一边便利数组,又同时修改这个数组里面的内容,导致崩溃
这种方法就是在定义一个一模一样的数组,便利数组A然后操作数组B
今天终于找到了一个更快接的删除数组里面的内容以及修改数组里面的内容的方法:
NSMutableArray *tempArray = [[NSMutableArray alloc]initWithObjects:@"12",@"23",@"34",@"45",@"56", nil];
   [tempArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
   if ([obj isEqualToString:@"34"]) {
      *stop = YES;
       if (*stop == YES) {
           [tempArray replaceObjectAtIndex:idx withObject:@"3333333"];
       }
   }
   if (*stop) {
       NSLog(@"array is %@",tempArray);
    }
}];
19.老项目会Multiple commands produce 报错
New Build System会对构建中的元素循环进行严格的检查,避免不必要的重建,这个也是错误出现的原因。
针对Xcode10(默认设置新创建系统)进行一下操作即可适应老项目不报错:
Xcode -> File -> Workspace Setting… -> Build System中选择(Legacy Build System) -> Done 运行项目即可。
image.png

image.png

这个的原因是项目中使用第三方库,里面有README.md,README.txt,LICENSE,Info.plist之类的,而且是不止一个库中有,重复的这些文件,导致的报错。
  解决方案(如图):找到对应得第三方库的 target > Build phase > Copy Bundle Resource/Compile Sources,删掉第三方库中重复的上述文件即可。


image.png
20.在导入极光推送后在模拟器上运行报Undefined symbols for architecture i386: "OBJC_CLASS$_JPUSHService", referenced from: objc。。。的错误
不能使用不属于处理器为i386的模拟器,解决方法:
Build Settings里的 Build Active Architecture Only设置成了NO。现在改成了YES。

详细可见:https://community.jiguang.cn/t/sdk--objc-class---jpushservice-referenced/12631/3

image.png
21.Undefined symbols for architecture arm64: "OBJC_CLASS$_HomeFeedBackListAllModel", referenced from XXXX.o
image.png
有可能是因为创建模型套模型的类时,少了在.m文件里的声明
22、在UITextView输入框中粘贴大量的文字时,UITextView内容自适应高度计算出现误差,导致整块文字上移消失。
解决方案
在UITextView文字改变的监听中添加如下方法即可。
[self.textView scrollRangeToVisible:self.textView.selectedRange];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,978评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,954评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,623评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,324评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,390评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,741评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,892评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,655评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,104评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,569评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,254评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,834评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,725评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,950评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,260评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,446评论 2 348

推荐阅读更多精彩内容