iOS 开发中遇到的那些坑

 

本文来自于CSDN博客,作者:韩俊强,已获授权,版权归原作者所有,未经作者同意,请勿转载。
欢迎同有博客好文章的作者加微信(ID:tm_forever_miss)或直接邮件(mobilehub@csdn.net)投稿、约稿、给文章纠错。


从事iOS开发有些年月了,从最开始的磕磕绊绊,不知所措,到现在的遇到困难都能快速做出最佳方案处理,中间经历了不可或缺的痛苦。在项目开发中,本人有用印象笔记记录的习惯,所以很多重复出现的坑,很快迎刃而解,而不在同一个地方摔倒两次。为此,特意总结了一下开发中经常遇到的坑,有些可能和你形成共鸣,有些在你看来或许是小儿科,不喜勿喷。

A valid provisioning profile forthis executable was not found.

解决问题所在:发布证书无法运行在真机上!!!

XCode8的项目在xcode7运行报错:

The document “ViewController.xib” requires Xcode 8.0 or later. This version does not support documents saved in the Xcode 8 format. Open thisdocumentwith Xcode 8.0 or later.

有两种方法解决这个问题:

  1. 你同事也升级Xcode8,比较推荐这种方式,应该迎接改变。

  2. 右击XIB或SB文件 -> Open as -> Source Code,删除xml文件中下面一行字段。

场景:tabbar左右pan手势切换,其中一个VC是UIPageViewController,这样会导致到pageView的时候不能切换tabbar,如何禁掉pageVC切换呢?

出于UIPageViewController和UItableView等产生手势冲突,我们往往要禁用其翻页手势,代码如下:self.pageViewController.dataSource = nil;

网络上搜到的重写手势等方法,亲测无效,所以给出这个最简单粗暴的方法。

// tabbar的切换动画(一般不用哦)  

- (void)viewWillDisappear:(BOOL)animated  {      [super viewWillDisappear:animated];          CATransition *transition = [CATransition animation];      [transition setDuration:1];      [transition setType:@"fade"];      [self.tabBarController.view.layer addAnimation:transition forKey:nil];  }
// 解决带有轮播图的手势冲突  

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch  {      if (touch.view.frame.origin.y<100){          return NO;      }      return YES;  }
//1,禁止.DS_store生成:  
打开 “终端” ,复制黏贴下面的命令,回车执行,重启Mac即可生效。  defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool TRUE  

//2,恢复.DS_store生成:  
defaults delete com.apple.desktopservices DSDontWriteNetworkStores

FMDB根据条件查询数据库出现的错误:

解决办法:

后台数据中出现空格特殊字符:

问题:注意选项A…我竟然匹配不到这种字符, \r\n\t都不行。

方案:中文全角空格…你想说什么…我转了下…\u3000  已解决!

取整问题:

//Objective-C拓展了C,自然很多用法是和C一致的。比如浮点数转化成整数,就有以下四种情况。  
//1.简单粗暴,直接转化  

float f = 1.5; int a; a = (int)f; NSLog("a = %d",a);  

//输出结果是1。(int)是强制类型转化,丢弃浮点数的小数部分。  
//2.高斯函数,向下取整  

float f = 1.6; int a; a = floor(f); NSLog("a = %d",a);  
//输出结果是1。floor()方法是向下取整,类似于数学中的高斯函数 [].取得不大于浮点数的最大整数,对于正数来说是舍弃浮点数部分,对于复数来说,舍弃浮点数部分后再减1.  

//3.ceil函数,向上取整。  

float f = 1.5; int a; a = ceil(f); NSLog("a = %d",a);  
//输出结果是2。ceil()方法是向上取整,取得不小于浮点数的最小整数,对于正数来说是舍弃浮点数部分并加1,对于复数来说就是舍弃浮点数部分.  

//4.通过强制类型转换四舍五入。  

float f = 1.5; int a; a = (int)(f+0.5); NSLog("a = %d",a);

关于block传值及数据同步总结:

A B C三个界面间C界面修改内容达到AB界面刷新最新的数据保持ABC数据同步:1.C到B可以用block回调传值 2.B界面到A界面只需在B界面Back的时候发出拉取数据并刷新cell即可解决数据不同步现象。

//在iOS开发过程中, 我们可能会碰到一些系统方法弃用, weak、循环引用、不能执行之类的警告。 有代码洁癖的孩子们很想消除他们, 今天就让我们来一次Fuck 警告!!  

//首先学会基本的语句  

#pragma clang diagnostic push  #pragma clang diagnostic ignored "-Wdeprecated-declarations"
//这里写出现警告的代码  
#pragma clang diagnostic pop   
//这样就消除了方法弃用的警告!

iOS8调用相机警告:

错误代码:Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or
snapshot after screen updates.

IOS8多了一个样式UIModalPresentationOverCurrentContext,
IOS8中 presentViewController时请将控制器的modalPresentationStyle设置为 UIModalPresentationOverCurrentContext,问题解决!!

错误点: ENABLE_BITCODE错误设置(mrc下)

解决方法:


                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信