一、字符串转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. OPEN CASCADE编译视频

    为了帮助OPEN CASCADE新手顺利编译OPEN CASCADE源码,特录制了一个视频, 有了这个视频,OPEN CASCADE的编译再也不麻烦啦!

  2. (转)ubuntu apache2 的负载均衡和反向代理

    apache功能其实很是强大,最近一段时间研究了下apache的反向代理和负载均衡,反向代理网协的外网出口和我的博客出口就是通过apache的反向代理实现的,总结一下,重点说说负载均衡的配置. 首先说 ...

  3. 深入理解Spring--动手实现一个简单的SpringIOC容器

    接触Spring快半年了,前段时间刚用Spring4+S2H4做完了自己的毕设,但是很明显感觉对Spring尤其是IOC容器的实现原理理解的不到位,说白了,就是仅仅停留在会用的阶段,有一颗想读源码的心 ...

  4. Bootstrap框架的学习(一)

    一.Bootstrap框架介绍 Bootstrap是一个非常优秀的前端UI框架,一个轻量级的UI前端框架,是基于HTML+CSS+JavaScript的框架. 二.简单介绍 Bootstrap框架是属 ...

  5. 关于png、jpg、gif切图时的使用感悟

    关于png.jpg.gif切图时的使用感悟 曾经切图时都是一股脑所有图全切成jpg格式,最近突然心血来潮简单的研究了下其他图片格式的具体属性,才突然发现走了不少弯路,并没有做到使图片用最小体积展现出最 ...

  6. 完美解决,浏览器下拉显示网址问题 | 完美解决,使用原生 scroll 写下拉刷新

    在 web 开发过程中我们经常遇到,不想让用户下拉看到我的地址,也有时候在 div 中没有惯性滚动,就此也出了 iScroll 这种关于滚动条的框架,但是就为了一个体验去使用一个框架好像又不值得,今天 ...

  7. VR/AR 非技术总结

    VR/AR 非技术总结 **欢迎转载~转载请注明Erma的博客 http://www.cnblogs.com/Erma-king/** 都说2016是VR/AR的元年,上半年我随着新技术的潮流进入了V ...

  8. 『.NET Core CLI工具文档』(十三)dotnet-publish

    说明:本文是个人翻译文章,由于个人水平有限,有不对的地方请大家帮忙更正. 原文:dotnet-publish 翻译:dotnet-publish 名称 dotnet-publish - 打包应用程序及 ...

  9. Github pages + jekyll 博客快速搭建

    Github pages + jekyll 博客快速搭建 寻找喜欢的模版 https://github.com/jekyll/jekyll/wiki/sites http://jekyllthemes ...

  10. C# - 多线程 之 锁系统

    lock 关键字, Monitor 监控器, using System.Threading: // 提供同步访问对象的机制. public static class Monitor { public ...