UI中一系列 个人错误总结

来源:互联网 发布:二十四节气壁纸软件 编辑:程序博客网 时间:2024/06/08 16:06

错误归结点:

1---unrecognized selector sent to instance 0x7f6a240是你声明了一个属性XX后,又对这个属性的setter、getter方法进行了重写,但是在你第一次使用这个属性的时候,没有用self.XX,而用了_XX,所以导致出错。出错的缘由是:使用_XX相当于你使用了一个没有alloc、init的实例变量,而self.XX就会走你的setter/getter方法。其实主要是在你对这个属性进行了懒加载之后会犯这种错误。所以,记住,只要是一个对象,就必须先alloc/init之后才能对这个对象进行操作。


2、-- 

reason: '-[__NSArrayI removeObjectAtIndex:]: unrecognized selector sent to instance 0x7ff29aeebb30'


因为这个原因,今天花了上午一个多小时,下午半个小时,我差点已经进入了奔溃的边缘,我就在想,我的整个程序流程没有一点点的出错,为什么处理事件就是一直报错了,终于在快要放弃的时候,找到了关键点,在添加数据的时候,我用的NSArray 而后来处理的时候,我却用了NSMutableArray来记录本来是NSArray的数据,怪不得在removeObject:的时候一直报错。其实这是一个很小的点,但是对于我这种菜鸟级别的人来说,却是一个致命的出错点。所以以后做项目的时候,使用MVC模型时,一定要注意,在Controller中处理的数据是根据Model模型中的数据来进行处理的,这点一定要切记,真的是很容易犯错,对于没有项目经验的孩子来说。总结一点就是:Controller中处理的数据时刻跟Model中的数据的数据类型保持一致。


3、

reason: 'Invalid update: invalid number of sections.  The number of sections contained in the table view after the update (3) must be equal to the number of sections contained in the table view before the update (3), plus or minus the number of sections inserted or deleted (0 inserted, 1 deleted).'

无效更新:无效的分区数。更新后的表视图中包含的部分的数目(0)必须等于在更新前(3),再加上或减去插入或删除(0插入,1删除)的部分的数目。


总之一句话就是:数据和页面不对应。

在更新页面的同时记得更新数据。


4、

reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]'


首先,来讲讲这个错误的根源就是:在给字典的value赋值时,出现了空值的情况。

一种很偷懒的解决方案就是看下面的代码解释。

 //2.设置NSDictionary

    NSDictionary *dic = @{

                          NSFontAttributeName:_hobbyLabel.font

                          };

    

   //上面这种字面量给字典赋值,如果遇到value为空值的时候,就会报错。

    

   //下面这种初始化方法是可以过滤掉valuenil的赋值情况,至于为什么,我可以在深究一下。

   //这样如果valuenil就不会加入字典,使用 objectForKey:取出来的对象就会为nil对象,不会引发崩溃

   //但是如果出现nil的情况,还是要找到这种问题的根本在哪。

//    NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:_hobbyLabel.font,NSFontAttributeName, nil];


真正出问题的地方:

//因为,走[BoyCell new]实际上就是 alloc/init 方法,但是在这个方法中并没有对控件做任何加载的操作,所以这里当转入下一个HeightForContent方法时,根本就不会有任何控件的赋值过程,所以,_hobbyLabel本身就是一个nil,所以就会爆出reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]'


//    CGFloat height = [[BoyCell new] calculateHeightForContent:student];

    

    //修改:

    CGFloat height = [[[BoyCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"" student:student] calculateHeightForContent:student];



 对于这个问题,我自己花了一天的零零散散的时间,还发给了几个朋友帮忙看,自己在快要找到问题的时候,我一个朋友-茂茂,只花了几分钟的时间,就帮我把问题解决了。我就在想我们之间的差距在哪。1,他分析问题特别有条理性,人家会一个步骤一个步骤的看下去,可是我却不会,我会无厘头的乱转,虽然最后也能找到错误的根源,可是我们花得时间比简直就是天壤之别。之前一直觉得就是茂茂太聪明了,后来发现其实是自己太大意了,明明一个比较很简单的东西,因为自己没有摸清楚路线,以至于让自己一直绕弯路。

 今天又发现自己的一个编程的坏习惯,就是逻辑思维太弱,怎么样增强自己的逻辑思维了,就是遇到错误要学会一条一条的去寻找错误,而不是无厘头的乱碰。



0 0
原创粉丝点击