iOS常见问题(4)
一、非ARC内存管理问题。
有些同学在创建项目的时候忘记点ARC了,导致一些成员属性都莫名其妙的释放了。然后出现了一系列莫名其妙的错误。
在滚动UITableView的时候出现野指针错误。

一出现这些野指针错误,首先应该想到某些对象被释放了,然后发现代码中,并没有什么造成对象被释放的情况,这时候应该马上想到很可能是非ARC弄的。下图为怎么查看项目是否是非ARC。

在非ARC中没有强引用的概念,因此下图的成员变量是没有被强引用的。

在看看下图,allPro数组没有通过alloc调用,没有调用alloc产生的对象都是自动释放的
allPro=@[
@{
kCities:@[@"浦东",@"杨浦",@"闸北",@"闵行"],
kHeader:@"上海",
kFooter:@"上海不错"
},
@{
kCities:@[@"海淀",@"昌平",@"天安门"],
kHeader:@"北京",
kFooter:@"北京很好"
} ];
所以在滚动的时候会出现野指针错误,因此需要将项目改成ARC。如下图


两个勾都得选中,然后一直点确认就OK了。
二、数据模型属性采用的策略中除了基本类型需要用assign,字符串需要用copy,其他对象类型都需要用strong。而控制器中视图采用的策略需要根据情况而定。
下图就是数据模型中属性用错了策略导致,UITableViewcell重新出现到界面时,会导致数据丢失。

三、想在点击cell时做些操作,方法选错了。
下面两个方法太相似了,很容易选错。
// 当点击一行cell时,会调用这个方法
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
// 当取消选择一行cell时,会调用这个方法
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
四、字符串小调试技巧
当把一个字符串转换成基本数据类型时,字符串打印有值,但是转换成基本数据类型为0时,这个莫名其妙的问题,首先应该想到字符串中很可能有换行符合等,导致转换不成功。

NSString *str = @" 123";
NSInteger i = [str integerValue];
NSLog(@"%@",str);
NSLog(@"%d",i);
碰到这种情况,可以在打印字符串的时候在占位符两边各加一个数字.
NSLog(@"1%@1",str);
然后看打印结果就能知道有字符串中有多少空行了

只要将空行去掉就能转换成功了。字符串去掉空格的方法:
// 此方法是通过什么字符集裁剪字符串。
- (NSString *)stringByTrimmingCharactersInSet:(NSCharacterSet *)set;
NSCharacterSet对象可以通过类方法创建
// 创建空格和换行字符集
[NSCharacterSet whitespaceAndNewlineCharacterSet];
// 创建空格字符集
[NSCharacterSet whitespaceCharacterSet];
五、下图的警告意思是:初始化时,类型指向不匹配,应该用NSArray * 而不是YZPerson *

找到原因后,然后看person方法是怎么声明。

解决方式:将NSArray * 改成id。
六、UITableView数据源问题
1.1 
错误原因:说YZViewController 没有实现 tableView:numberOfRowsInSection:
解决方式:实现tableView:numberOfRowsInSection:
1.2

这里返回空,会报错。
UITableView内部实现原理:
数据源实现了这个方法
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath //tableView内部自动会调用以下方法添加cell。
[tableView addSubview:cell]; //如果返回的cell为空,也就意味着生成下面一行代码。
[tableView addSubview:nil];
而addSubview是将右边参数添加到数组中保存起来,而数组是不能添加空值的。所有集合对象都不能出传空。例如数组,字典,NSSet。
以上错误总结:作为tableView的数据源必须实现两个方法。
返回行数
-(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section;
返回每一行显示的内容
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
另外返回每一行显示的内容不能返回nil。
七、在数组删除一个模型,并不代表把这个模型给释放了。

上面步骤二,仅仅是将模型从数组中销毁,而模型并没有被销。
八、stroyboard中显示的跟根视图是UIView,而stroyboard的控制器是UITableViewController就会报这个错误

原因是:UITableViewController控制器不能加载UITableView,因为它会去加载stroyboard中的UIView。
解决方式:将stroyboard中的UIView改成UITableView
九、自定义视图的属性命名冲突问题

当发现自己描述的xib和运行的时候展现出来的不一样的时候,这时候已经想到自己命名的属性名称和系统命名的冲突了。
错误原因:

系统自带的UITableViewCell中也有imageView这个属性,因此冲突了。
解决办法:将自定义视图的imageView属性名称改成iconView.
注意:以后自定义属性命名不要和系统自带的属性名称相同。
十、链接错误

以后看到duplicate这个词语,错误原因就是重复定义了类,函数方法等等。
一般都是因为导入了.m文件
错误:
解决方式:将#import "newsCell.m"这一行删掉。
iOS常见问题(4)的更多相关文章
- [iOS常见问题] 关于使用QQ做第三方登录的问题!
[iOS常见问题] 关于使用QQ做第三方登录的问题! 注意:QQ本身没有授权功能,所以想要使用QQ做第三方登录必须通过QQ空间来实现! 第一步:集成ShareSDK(步骤同集成分享的一样,如果已经集成 ...
- ios常见问题 经验之谈
1.既然有问题我们该怎样解决 ? 首先大部分人都会去百度搜索来解决问题, 谁都不例外, 可是百度这东西会有很多误解, 甚至误人子弟, 同时解决问题的效率也不是很高, 如果是技术问题可以去: Googl ...
- iOS常见问题(5)
一.注意将之前storyboard中控制器删除之后,拖入一个新的控制器的时候,stroyboard中控制器的class也要重新填入自己想要展示的控制器,告诉stroyboard去加载哪个控制器. 二. ...
- iOS常见问题(3)
一.发现不少人在给成员变量初始化的时候,容易进错一个方法去初始化. //注意这个方法只有在内存发生警告的时候才会调用. - (void)didReceiveMemoryWarning { [super ...
- iOS常见问题(2)
一.模拟器黑屏 解决方法: 二.打代码时,Xcode没提示 解决方法: 0. 点击Preferences 1. 进入Text Editing 2. 勾选 三.有时候可能在勾选 Autolayout的时 ...
- iOS常见问题(1)
一.storyboard连线问题 产生原因:将与storyboard关联的属性删除了,但是storyboard中还保持之前所关联的属性. 解决: 1.点击view controller 2.点击这排最 ...
- iOS开发中常见问题集锦
在iOS开发中,会出现各种各样的问题.今天,就把这些常见的问题以及各位大牛的解决方案汇总下,方便以后查阅: 常见错误: 1. linker command failed with exit code ...
- 李洪强iOS之集成极光推送一iOS SDK概述
李洪强iOS之集成极光推送一iOS SDK概述 JPush iOS 从上图可以看出,JPush iOS Push 包括 2 个部分,APNs 推送(代理),与 JPush 应用内消息. 红色部分是 A ...
- (转载)中文Appium API 文档
该文档是Testerhome官方翻译的源地址:https://github.com/appium/appium/tree/master/docs/cn官方网站上的:http://appium.io/s ...
随机推荐
- GSS6 4487. Can you answer these queries VI splay
GSS6 Can you answer these queries VI 给出一个数列,有以下四种操作: I x y: 在位置x插入y.D x : 删除位置x上的元素.R x y: 把位置x用y取替 ...
- iOS 简单block的使用
1.第一种方法 声明block: - (void)test:(int) param_1 completion:(void(^)(int)) completion; 实现block: -(void)te ...
- ASP.Net 类(CS)文件怎样获取Web应用程序的路径
Web应用程序,写了一个线程CS类别,这个类别将会放于Global.asax文件中执行,主要是监控程序下某一个文件是否有异动,而作出相应警示动作,如发送邮件等. 实现运行过程中,也许会有一个情况出现, ...
- TableViewCell自适应高度
//初始化TableView时设置 self.tv.estimatedRowHeight=54;self.tv.rowHeight=UITableViewAutomaticDimension;
- [Silverlight] Visual Studio2010不能安装Silverlight4_Tools,提示语言不一致
今天在装Silverlight4_Tools时出现“必须先安装与 Silverlight Tools 4 语言版本相一致的 Visual Studio 2010.Visual Web Develope ...
- EF调用函数日期查询
q = q.Where(t => System.Data.Entity.SqlServer.SqlFunctions.DateDiff("dd", t.Date, dDate ...
- ABAP OO与ALV结合方式探索(2)
接上篇 一开始设计的BO 类是为了实现功能而实现功能 从类的单一职责的角度而言 先把这个BO对象拆分 这里又有一个需要考虑的点: 如何传递内表数据到ALV 如果引入一个中间变量,数据就会被do ...
- UIKit,Core Data , Core Graphics, Core Animation,和OpenGLES框架
iOS的主要框架介绍 框架是一个目录,这个目录包含了共享库,访问共享库里代码的头文件,和其它的图片和声音的资源文件.一个共享库定义的方法或函数可以被应用程序调用. IOS提供了很多你可以在应用程序 ...
- linux传送文件至服务器
scp安全文件拷贝(基于ssh的登陆) 1.你想把本地/home下的文件linux.tar.gz传送至远端服务器10.108.125.30,远端服务器的账号名为name,保存至服务器/home ...
- Silverlight自动根据屏幕分辨率进行布局
xaml: <UserControl x:Class="SLCenterLayout.MainPage" xmlns="http://schemas.microso ...