挖坑填坑——iOS开发经验总结

1、若使用空工程(AppDelegate.m文件中会自动生成self.window实例话代码),并且使用storyBoard建UI界面;这时直接运行系统会崩溃,一旦AppDelegate.m文件中写了,就会将storyBoard设置的相关内容覆盖,此时,咱们需要将那些实例话代码删除。这时候便能正常运行。

2.若运行成功但模拟器调用不出,查看是不是运行的静态库,正常应为target。

3.initWithNibName与loadNibNamed的区别

(1)-initWithNibName要加载的xib的类为我们定义的视图控制器类(UIViewController)

-loadNibNamed要加载的xib的类为NSOjbect。

(比如:甲,乙都买了一个iPhone,但是,甲的是自己的钱,而乙用的是某某的钱)

(2).加载方式不同

-initWithNibName方法:是延迟加载,这个View上的控件是nil的,只有到需要显示时,才会不是nil

-loadNibNamed方法:即时加载,用该方法加载的xib对象中的各个元素都已经存在。


挖坑填坑——iOS开发经验总结_第1张图片

4.cocoapods更新:podinstall --verbose --no-repo-update

5.使用系统键盘手写输入崩溃

在输入UITextField时,调出系统的手写键盘,在输入第二个字时,APP闪退

打印崩溃信息:UIKBBlurredKeyView candidateList:

unrecognized

原因:给UIScrollView增加的Category中重写了触摸方法(用于手势向下传递):(void)touchesBegan:(NSSet *)touches

withEvent:(UIEvent *)event {

[[self nextResponder]

touchesBegan:touches withEvent:event];

[super touchesBegan:touches withEvent:event];

解决方法:1.你扩展了某个UIView or UIScrollVIew的Category,并且重写了UITouchBegans、move、end方法。屏蔽该3个方法即可。

                  2.你当前的Controller可能覆盖了1中的3个方法,也是屏蔽即可。

                  3.搜索其他覆盖1中的3个方法,屏蔽即可。

6.如果UITableView的cell取不到,或者不正确,试试在设置cell时给cell添加一个index path属性,有奇效。

7.如果项目中证书不显示,试试删除之前的pp文件,即描述文件。为方便,可以拖出来放在finder侧边栏

删除Xcode中多余的证书provisioning profile:找到finder,菜单栏有一项,前往-》前往文件夹,输入命令-》 ~/Library/MobileDevice/Provisioning Profiles 

8.设置标题栏标题属性

·[self.navigationController.navigationBarsetTitleTextAttributes:@{NSFontAttributeName:[UIFontsystemFontOfSize:18],NSForegroundColorAttributeName:[UIColor whiteColor]}];

9.给button加title加下划线。xib中设置,选中字体右键,font,underline

·参考网址:

·http://stackoverflow.com/questions/2630004/underlining-text-in-uibutton

10.在for语句中,int i需要赋初值,否则在每次循环会赋随机值,导致数组发生越界,NSInterger i,在iOS 5以上默认赋初值0。

11.遍历一个数组看谁快

参赛选手ForLoop,For - in, enumerateObjectsUsingBlock这个三个方法:

·只是遍历数组:forin;

·通过value查找index:enumerateObjectsUsingBlock


挖坑填坑——iOS开发经验总结_第2张图片

12.FMDB

1). 表名不能以数字开始,否则会报错,建表失败。

2).若遇到使用FMDB报以下错误,注意将保存的简单类型的值换成对象:

·error:obj = va_arg(args, id);

·a. executeUpdate :不确定的参数用?来占位,参数都必须是对象

·[self.dbexecuteUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);",name, @(arc4random_uniform(40))];

·[self.dbexecuteUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);"withArgumentsInArray:@[name, @(arc4random_uniform(40))]];

·b.?方式,参数要是对象,不是对象要包装为对象

·executeUpdateWithFormat :

format方式拼接,不确定的参数用%@、%d等来占位

·[self.dbexecuteUpdateWithFormat:@"INSERT INTO t_student (name, age) VALUES (%@,%d);", name, arc4random_uniform(40)];

·注意:如果直接写%@不用加单引号两边,会自动加单引号两边,如果'jack_%d'的两边不加单引号就会报错,所以要注意

·[self.dbexecuteUpdateWithFormat:@"INSERT INTO t_student (name, age) VALUES('jack_%d', %d);", name, arc4random_uniform(40)];

·UPDATE表名称SET列名称=新值WHERE列名称=某值.

UPDATEPerson SET Address = 'Zhongshan 23', City = 'Nanjing'

·WHERE LastName = 'Wilson'

·UPDATE Person SET FirstName = 'Fred' WHERE

LastName = 'Wilson'

3).FMDB更新失败,记得检查更新语句是否写错,标点符号是否多加。

4). FMDB报没有字段的错,插入不了数据,记得检查插入语句是否写错,标点符号什么的。


挖坑填坑——iOS开发经验总结_第3张图片

13.设置button文字居左显示:

button.contentHorizontalAlignment=UIControlContentHorizontalAlignmentLeft;

14..xcode运行工程失败提示bundleID相同,注意

If your application bundle identifier iscom.companyName.productName then your extension bundle identifier should becom.companyName.productName.extensionName

If you assign the bundle identifier in thisway then your provisioning profile will work for both.

Egcom.szshyz.yuntu

com.szshyz.yuntu.test

15..tableView 关于分割线的设置,最好放在table已经注册好cell之后进行。否则有可能会崩溃。


挖坑填坑——iOS开发经验总结_第4张图片

你可能感兴趣的:(挖坑填坑——iOS开发经验总结)