美文网首页iOS
自己踩过的坑

自己踩过的坑

作者: lixiaoshuai | 来源:发表于2016-08-19 23:33 被阅读38次

    iOS 开发中你是否遇到这些经验问题(一) - CocoaChina_让移动开发更简单

    iOS 8个实用小技巧(总有你不知道的和你会用到的)

    1.switch 中的case要用大括号括起来

    2.在Objective-C中向nil发送消息是安全的

    3.自定义单元格时,经常将控件家在contentview上。如果在防止重用,移除子视图时,将cell.contentview.subviews写成了cell.subviews

    4.懒加载中将if (!_xxxx)中的_删掉了

    5.懒加载中的self.xxx 和_xxx的区别。(一个是get方法   一个是实例变量 , 懒加载中一定要调get方法)


    6.控件初始化添加后再视图上不可见(80%是frame某一个值设置的有问题)

    7.自己添加.pch文件步骤

    a:创建文件(xxxxxxxx)(最好创建在跟项目名同名的文件夹中,即创建前点击下那个文件夹下的一个区域)

    b:在target的build phase中search language 会看到APPLE LLVM 7.1 language

    在这个目录下会有Precompile Prefix Header  将其设置为yes

    c:在Prefix Header 中添加自己的.pch文件的路径 其中$(SRCROOT)代表项目的路径 在这之后拼接项目内路径


    8.a:(iOS9 及以下)允许http协议的借口的设置在项目的.plist文件中添加App Transport Security Setting(ATS) ,在它的子目录下添加 Allow Arbitrary Loads 并设置为yes。

    b:iOS10中,无法设置Allow Arbitrary Loads ,解决方案如下。

    1)、在项目的info.plist中添加一个Key:App Transport Security Settings,类型为字典类型。

    2)、然后给它添加一个Exception Domains,类型为字典类型;

    3)、把需要的支持的域添加給Exception Domains。其中域作为Key,类型为字典类型。

    4)、每个域下面需要设置3个属性:NSIncludesSubdomains(yes)、NSExceptionRequiresForwardSecrecy(no)、NSExceptionAllowsInsecureHTTPLoads(yes)。

    9.删除项目的资源文件时,要在项目中删除(不能在show in finder中删除),会导致警告。

    10.imageNamed方法初始化的image实例,如果name的图片不存在,初始化的值为nil。


    11.向数组中插入nil会崩。

    12.关于collectionviewflowlayout类的布局思路之一:

    a:声明一个数组属性,用于承装所有的布局属性

    b:在prepare方法中创建所有cell的index path并调用layoutforindexpath方法,为每一个相应的layoutattr设置相应的值,

    c:在layoutforrect方法中,返回这个数组。

    13.待解决:对于collection view来说,每一个cell是如何完成初始化的。

    答:在cellforindexpath方法中,忘记了if(!cell){初始化cell的代码},

    14.UISearchBar继承于UIView,与tableview相似的用法。通过代理实现回调的一些处理。

    15.在自定义的tableviewcell中,它的frame的值仍然是默认的值(44),需要在设置他的字视图之前,将它的值改成需要的值的大小。


    16.防止tableview重用时,将content view的字视图移除后,设置好cell的字视图的属性后,要将这些子视图重新添加到cell.contentView上。

    17.button的内部其实挺复杂的。(继承于UIControl)

    其中imageedgeinset的属性是对于image属性。对image view,back image 没有效果。

    18.在block中修改局部变量的值,需要用__block进行修饰。用到self时,要用__weak进行修饰。

    19.-drawrect方法不要用。

    20.只读属性的值如何更改?(需要使用运行时的东西,具体做法不详)


    21.开发过程中,常用的代码要形成代码块。增加效率。

    22.永远是眼高手低

    23.先创建layout类,在写collection view。collectionview初始化的时候一定记得注册单元格。会崩。

    24.定义全局的静态变量写在@implementation后

    25.在一个控制器中,表的作用仅仅是显示数据停留在界面层的作用。不应该通过表的属性获取一些信息值。信息值应该存在于有关的datamodel类中,专门做信息的传递。通过cellforindexpath方法获取的cell,如果这个cell不再屏幕范围内,会返回为nil。


    26.array初始化后添加的字符串做的是值的拷贝。例如数组添加了一个变量,然后在改变着歌变量的值,数组中的值不会随之改变。因为是做的值的拷贝。

    27.刚刚编译时突然报红No such file or directory: '/Users...,在项目里搜对应文件发现它就静静的在那,没有任何异常,解决方法:删掉TARGETS - Build Phases - Compile Sources 里白框的文件

    28.appdelegate 的类目的使用。对于delegate可以使用category的方式对其进行分类。更加清晰。

    app delegate 的分类处理

    29.对于iOS7以及更新版本 ,textview 输入时上下跳动的bug。iOS7以后UITextView 技巧 - 奋进的闹钟 - 博客园

    坑1:

    iOS7及以上的版本上,UITextView出现这样的问题:弹出键盘时,没输入任何文字,但是光标位置不是在最上方。

    解决方案: iOS7以后新增了一个属性automaticallyAdjustsScrollViewInsets,将其置为NO即可。别忘了加版本判断。

    if (IOS7_And_Later) {

    self.automaticallyAdjustsScrollViewInsets = NO;

    }

    坑2:

    iOS7及以上的版本上,UITextView输入中文时,在输入多行后,光标有时会上下跳动,输入文字的时候内容有时会往上跳,光标都显示不出来。这个bug坑死好多人啊,特别是做聊天输入框的时候,不得已找一些非正常的方法解决。从网上找的各种解决方案都不行。

    复制代码

    - (void)textViewDidChangeSelection:(UITextView *)textView

    {

    //fix ios7 bug (modified by 老岳).

    if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {

    CGRect r = [textView caretRectForPosition:textView.selectedTextRange.end];

    CGFloat caretY =  MAX(r.origin.y - textView.frame.size.height + r.size.height + 8, 0);

    if (textView.contentOffset.y < caretY && r.origin.y != INFINITY) {

    textView.contentOffset = CGPointMake(0, caretY);

    }

    }

    }


    30.检查IDFA的方法:

    步骤:

    1、打开终端cd到要检查的文件的根目录。

    2、执行下列语句:grep -r advertisingIdentifier .  (别少了最后那个点号)。


    31.aruchive项目时,弹出Not a PNG filCommand copypng emitted errors but did not return a nonzero exit code to indicate failure。项目图片问题。

    可能的原因a:项目中有图片不是png图片,将图片格式华为png格式。

    b:Two targets were added for same image. Goto project target ->Build Phases -> Copy Bundle Resources and search for your image file name.


    32.UIScrollView 的几种属性的含义。(很低级,但是,知之为知之,不知为不知,是知也。没那么简单)

    contentSize :(CGSize)视图内容大小。展示的主要区域

    contentInset:(UIEdgeInset)视图缩进的数量

    contentOffset:(CGPoint)视图偏移量(他的值是视图内容的坐上角和scrollView的左上角的差值(用小demo测试过),初始化后暂时为(0,0))

    最后,scrollview滚动区域大小是 contentSize contentInset 的总和。

    33.项目刚被创建后的suprooting Files的无力文件夹式不存在的。因此在写pch文件的路径时候要注意。

    34.将文件夹拖入项目中时要勾选项目意义

    a:group b:Folder reference

    1. Group 分组(黄色)

    在xCode的工程中,右键New Group, 即可创建,也就是黄色的文件夹。

    工程中想要分类管理的文件,可以分门别类的放在不同的group里面

    group本身不影响文件的物理存放,也就是实际存放位置,只是在Project文件中

    2.Folder reference(蓝色)

    在管理大量资源文件时候,利用foler reference可方便和实际文件夹构造保持一致.

    tips:Folder reference 形势拖入时,文件夹下的文件路径又可能找不到,在build setting 的搜索 search path 将 header search path 中添加某一特定的文件路径即可。例如:$(SRCROOT)/testOne/Category

    35.经常遇到xcode8打不开项目的问题。(打不开特定项目,或打开项目无响应)

    电脑上安装了其他版本的xcode(我安装了Xcode7.3),卸载其他版本的Xcode后,可以正常打开。


    36.uiwebview (继承于UIView) 没有bounce属性。设置不滑动代码为 [(UIScrollView *)[[webView subviews] objectAtIndex:0] setBounces:NO];

    37.webview 加载本地html5文件urlstring 需要拼接路径。

    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"xxx/xxx/xx.html" relativeToURL:[[NSBundle mainBundle] bundleURL]]]];

    38.学校是可以申请公司级别的开发者账号的。

    公司和教育机构必须提供为其法人实体注册的 D-U-N-S Number;而对于政府组织,D-U-N-S Number 则是可选信息。如果您以个人身份注册,则无需 D-U-N-S Number。

    39.CADispalyLink  的区别 NSTimer

    最主要的是刷新的频率不同。前者和页面刷新的频率相同(每秒60次)。后者可以自定义刷新间隔。

    因此前者适合对页面做实时的更新。后者是可循环处理相同任务及其他场景。



    40.对mask(遮罩)的理解(果然还是看图说话什么的管用)


    遮罩的理解


    关于遮罩的解释。会显示父视图中自己本身不透明的区域

    将一个layer设置为mask的时候,该 layer会被从其父视图中移除

    设置mask时,mask的坐标系统会变为其对象的坐标系统

    41.iOS中的随机数    iOS 随机数

    1.arc4random() 需要自己取模。

    2.arc4random_uniform(x) 产生[0~(x-1))范围内的随机数;(包括0)

    42.要对cell做内容改动时,不要直接获取 cell并修改属性值。要先修改数据源,然后通过cellforrowatidexpath对cell的展示内容进行更新。

    43.脱.app文件到iTunes生成ipa时候,要确保编译通过,否则无法产生正常的包。

    相关文章

      网友评论

        本文标题:自己踩过的坑

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