一、字符串转JSON

在网络请求时,如果服务端返回的是字符串,那么就需要我们自己封装一个类,将请求下来的字符串转换成json对象,从而存入模型中。

注意: 字符串中如果含有一些特殊转意符(如\n、\t等),需要先对字符串进行处理。

示例代码如下:

+(NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString{
if (jsonString == nil) {
return nil;
}
jsonString = [jsonString stringByReplacingOccurrencesOfString:@"\\r" withString:@""];
jsonString = [jsonString stringByReplacingOccurrencesOfString:@"\\n" withString:@""];
jsonString = [jsonString stringByReplacingOccurrencesOfString:@"\\s" withString:@""];
jsonString = [jsonString stringByReplacingOccurrencesOfString:@"\\t" withString:@""];
jsonString = [jsonString stringByReplacingOccurrencesOfString:@"\\v" withString:@""];
jsonString = [jsonString stringByReplacingOccurrencesOfString:@"\\f" withString:@""];
jsonString = [jsonString stringByReplacingOccurrencesOfString:@"\\b" withString:@""];
jsonString = [jsonString stringByReplacingOccurrencesOfString:@"\\a" withString:@""];
jsonString = [jsonString stringByReplacingOccurrencesOfString:@"\\e" withString:@""];
NSData * jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError * err;
NSDictionary * dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&err];
if (err) {
YSXLog(@"json解析失败:%@",err);
return nil;
}
return dic;
}

二、图片拉伸

UIImageView *rightImagV = [[UIImageView alloc]init];
UIImage* img=[UIImage imageNamed:@"tu_text_Values"];//原图
UIEdgeInsets edge=UIEdgeInsetsMake(, myScalWidth(), ,myScalWidth());
//UIImageResizingModeStretch:拉伸模式,通过拉伸UIEdgeInsets指定的矩形区域来填充图片
//UIImageResizingModeTile:平铺模式,通过重复显示UIEdgeInsets指定的矩形区域来填充图
img= [img resizableImageWithCapInsets:edge resizingMode:UIImageResizingModeStretch];
rightImagV.image = img;
[rightImagV sizeToFit];
rightImagV.width = myScalWidth()+scoreL.width+myScalWidth();
rightImagV.x = SCREEN_WIDTH - myScalWidth()-rightImagV.width;
rightImagV.centerY = CGRectGetMidY(proV.frame);
[topView addSubview:rightImagV];
scoreL.x = myScalWidth();
scoreL.centerY = rightImagV.height*0.5;
[rightImagV addSubview:scoreL];

三、Label文字自适应frame

方式一

推荐此方式,此方式能够获取高度,实现自动换行、行距设置

UILabel * infoLab=[[UILabel alloc] init];
// infoLab.text=self.infoText;
infoLab.font=[UIFont systemFontOfSize:myScalFont()];
infoLab.textColor=RGB(, , , );
infoLab.numberOfLines=;
NSMutableAttributedString *infoStr = [HP_NString createAttributeStringWithText:self.infoText LineSpace:myScalHeight() andFont:infoLab.font andColor:infoLab.textColor];
infoLab.attributedText = infoStr;
CGSize infoSize = [HP_NString sizeOfText:self.infoText withFont:infoLab.font andSize:CGSizeMake(bgView.valueOfW-myScalWidth()*, ) andLineSpace:myScalHeight() andColor:infoLab.textColor];
infoLab.width=infoSize.width;
infoLab.height=infoSize.height;
infoLab.x=typeLab.valueOfX;
infoLab.y=typeLab.valueOfBottomMargin+myScalHeight();
[self.view addSubview:infoLab];

方式二

CGFloat detailInfoLabelX=CGRectGetMidX(questImageView.frame);
CGFloat detailInfoLabelW=detailInfoView.width-detailInfoLabelX*;
UILabel * detailInfoLabel=[[UILabel alloc] init]; detailInfoLabel.numberOfLines=;
detailInfoLabel.text=@"啦啦啦啦啦啦啦啦啦啦啦啦啦啦啊啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啊啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啊啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦";
detailInfoLabel.textColor=RGB(, , , );
detailInfoLabel.font=[UIFont systemFontOfSize:myScalFont()];
CGSize detailSize=[detailInfoLabel.text sizeWithFont:detailInfoLabel.font constrainedToSize:CGSizeMake(detailInfoLabelW, MAXFLOAT) lineBreakMode:NSLineBreakByCharWrapping];
detailInfoLabel.x=detailInfoLabelX;
detailInfoLabel.y=;
detailInfoLabel.width=detailSize.width;
detailInfoLabel.height=detailSize.height;
[detailInfoView addSubview:detailInfoLabel];

四、时间间隔一天

项目中的需求:控制弹窗弹出次数,要求每天弹出一次即可,写一个类,方便调用

+(void)jumpToVC:(UIViewController *)myVC withSaveParam:(NSString *)saveParam withSaveDate:(NSDate *)saveDate withNavigationController:(UINavigationController *)nav{
//判断参数是否保存
if (saveParam.length> && saveParam != nil) {//Y
YSXLog(@"参数已保存");
}else{//N
//判断时间是否保存
if (saveDate != nil) {//Y
//判断是否超过24小时
if ([[NSDate date] timeIntervalSinceDate:saveDate]/ >) {//超过24小时 [nav pushViewController:myVC animated:YES];
}else{
YSXLog(@"没有超过24小时");
} }else{//N跳转 [nav pushViewController:myVC animated:YES];
}
}}

调用时,由于“所依赖的界面”还没加载完,所以有时不能成功弹出,可以适当延迟弹出时间1秒

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)( * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
EmailViewController * vc = [[EmailViewController alloc] init];
[YSXJumpToVC jumpToVC:vc withSaveParam:[YSXUserInfo sharedYSXUserInfo].addEmail withSaveDate:[YSXUserInfo sharedYSXUserInfo].addEmailDate withNavigationController:self.navigationController];
});

五、两个日期的比较

从服务器以字符串的形式返回两个时间,要求比较两者的大小

NSDateFormatter * df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate * dt1 = [[NSDate alloc] init];
NSDate * dt2 = [[NSDate alloc] init];
//签到拿到的时间
dt1 = [df dateFromString:[YSXUserInfo sharedYSXUserInfo].comentTimeStr1];
//实时获取时间
dt2 = [df dateFromString:[YSXUserInfo sharedYSXUserInfo].comentTimeStr];
NSComparisonResult result = [dt1 compare:dt2];
if (result == NSOrderedDescending) {//dt1>dt2
redView.hidden = NO;
}else{
redView.hidden = YES;
} //当dt1大于dt2时,结果为 NSOrderedDescending
//当dt1等于dt2时,结果为 NSOrderedSame
//当dt1小于dt2时,结果为NSOrderedAscending

六、UIView添加阴影效果无效

给圆角化的view四周加阴影效果,结果搞半天没搞出来,原来是我对view圆角化的时候,除了View.layer.cornerRadius的设置,后面总是习惯地加上View.layer.masksToBounds = YES,剪裁了阴影当然没有了。

七、隐藏状态栏

一般情况下我们创建界面的时候系统会预留20px空白给顶部状态栏,但是这空白不好看呀,所以我们在对应的控制器里viewDidLoad方法里加上self.automaticallyAdjustsScrollViewInsets = NO,而[[UIApplication sharedApplication]setStatusBarHidden:YES
withAnimation:UIStatusBarAnimationFade];是将整个状态栏给隐藏掉了,用户体验效果不好,这里并不提倡。在我处理状态栏的时候发现automaticallyAdjustsScrollViewInsets的方法不起作用,经过上网查询,最终解决了,原来控制器里我将scrollView作为了第一视图, 只要scrollView的第一视图身份取消,automaticallyAdjustsScrollViewInsets方法就奏效了。

OK,今天先总结这几点,错误的地方,希望大神多多指点!

iOS总结:项目中的各种小坑汇总的更多相关文章

  1. JavaScript中的各种小坑汇总

    1.Number()将部分非数字类型转换为0 强制转换为数值类型函数: parseFloat.parseInt 优点:对非数值类型统一返回NaN 缺点:会将一部分符合数值类型的字符串也识别为数值 pa ...

  2. 项目中踩过的坑之-sessionStorage

    总想写点什么,却不知道从何写起,那就从项目中踩过的坑开始吧,希望能给可能碰到相同问题的小伙伴一点帮助. 项目情景: 有一个id,要求通过当前网页打开一个新页面(不是当前页面),并把id传给打开的新页面 ...

  3. iOS原生项目中集成React Native

    1.本文的前提条件是,电脑上已经安装了CocoaPods,React Native相关环境. 2.使用Xcode新建一个工程.EmbedRNMeituan [图1] 3.使用CocoaPods安装Re ...

  4. iOS 之项目中遇到的问题总结

    昨天去一家公司面试,面试官问了我在项目开发中遇到过哪些问题,是什么引起的,怎样解决的? 当时由于有点小紧张只说出了一两点,现在就来好好总结一下. 问题: 1.两表联动 所谓的两表联动就是有左右两个表格 ...

  5. iOS:项目中疑难Crash问题集锦

    项目中疑难Crash问题集锦 iOS App运行中遇到Crash的情况相信大家都遇到过,开发和者测试中遇到了可能很方便的办法就是直接拿着设备连接一下,然后使用Xcode自带的工具就可以解析出Crash ...

  6. Extjs 项目中常用的小技巧,也许你用得着(2)

    接着来,也是刚刚遇到的 panel怎么进行收缩 collapsible: true, 这会panel就会出现这个 点这个就可以收缩了 panel怎么随便拉伸,也就是让那个小黑三角出现 split: t ...

  7. Extjs 项目中常用的小技巧,也许你用得着(1)

    我在项目中遇到的一些知识点: 1.在GridPanel中显示图片,效果 对应的代码实现 { text: '是否启用', width: 80, // xtype: 'checkcolumn', data ...

  8. 一次 react-router 中遇到的小坑

    react-router Link 标签不生效的问题 废话不多说, 直接上问题, 排解过程和答案 现象: 发现 使用 Link 标签没有 元素的样式和效果, 也不能进行跳转 代码如下: render( ...

  9. BUI Webapp用于项目中的一点小心得

    接触BUI也有一段时间,也用在了移动端的项目开发中,总的来说,该框架用起来也挺灵活的,控件可以自由定制,前提是自己能认真地学习该框架的api,因为api里面说的东西比较详细,如果没有仔细看的,可能有些 ...

随机推荐

  1. Android学习路线

    第一阶段:Java面向对象编程 1.Java基本数据类型与表达式,分支循环. 2.String和StringBuffer的使用.正则表达式. 3.面向对象的抽象,封装,继承,多态,类与对象,对象初始化 ...

  2. 利用Python进行数据分析(9) pandas基础: 汇总统计和计算

    pandas 对象拥有一些常用的数学和统计方法.   例如,sum() 方法,进行列小计:   sum() 方法传入 axis=1 指定为横向汇总,即行小计:   idxmax() 获取最大值对应的索 ...

  3. 关于Java语言中那些修饰符

    一.在java中提供的一些修饰符,这些修饰符可以修饰类.变量和方法,在java中常见的修饰符有:abstract(抽象的).static(静态的).public(公共的).protected(受保护的 ...

  4. 基于NodeJS微信公众号

    最近重新研究了微信公众号的高级接口,原来也利用C#或JAVA写过微信公众号,主要是消息的基础接口. 由于当时不知道微信公众号可以申请测试公众号,微信测试公众号基本上没有任何限制,对于开发来说是一个不错 ...

  5. 使用BitArray判断素数

    首先显示1024范围内的所有素数,然后显示输入的数是否是素数.1024 是代码中计算的素数的范围,可以修改.计算平方根,是为了确定一个基数的范围.1024的平方根是32,两个超过32 的数相乘,肯定大 ...

  6. .NET开发之快捷键篇

    引言:我们都知道快捷键使用得熟,将极大的提高我们的开发效率.可是我发现许多开发人员老喜欢用鼠标去点,不擅长使用快捷键. 1.VS常用快捷键 这个我们记住开发中常用的就可以了. F4:打开属性面板. F ...

  7. Java NIO概述

    Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然 Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Se ...

  8. Hibernate框架之Criteria查询 和注解(重点☆☆☆☆☆,难点☆☆☆)

    写好一篇博客,不是容易的事.原因是:你要给自己以后看的时候,还能看懂,最重要的是当别人看到你的博客文章的时候,也一样很清楚的明白你自己写的东西.其实这也是一种成就感!! 对于每一个知识点,要有必要的解 ...

  9. 关于IOS中safari下的select下拉菜单,文字过长不换行的问题

    今天遇到下图这种问题,文字过长,显示不全.折腾了老半天,在网上搜了半天也找不到解决方案. 于是问了下同事,同事提到了<optgroup>,这个标签厉害. <optgroup> ...

  10. CssStats – 分析和优化网站 CSS 代码的利器

    CssStats 是一个在线的 CSS 代码分析工具,你只需要输入网址或者直接 CSS 地址即可进行 CSS 代码的全方位分析,是前端开发人员和网页设计师分析网站 CSS 代码的利器,可以统计出 CS ...