IOS开发学习笔记(2)

昨天开始做一个小的玩具,大概就是点击一个Button,然后在TabView里面增加一行文字。开发过程真心纠结。首先按照《一步步学习IOS5编程(第二版)》里面弄了一个TabView出来,然后弄了个两个Button上去,但是突然发现Button看不到了……当时不知道为什么出了这个奇异的事情,就换掉了一个Button,加上了一个TextBox。这个时候有结果了,但是坑爹的是,TabView会延伸到TextBox的底下……后来一个童鞋改了TabView的一个属性就好了,悲催的是,我现在忘了是改了哪个属性了……

 

然后我去写了一个ButtonPressed的事件,和Button绑定上了。这个时候我点击了一下Button。什么事情都没有发生……真心蛋碎。上网查了一下,发现是TableView没有reloadData。但是我发现我木有办法引用到TableView。前面各种写事件,都是写好了,然后在storyboard上绑定的。这下就坑爹了啊。后来求教薛童鞋,知道了要去声明一个IBOutlet的属性,然后让storyboard上的tabview和这个绑定上……

 

这些弄完了,我也reloadData了,但是还是不行……于是我们经历了一个漫长的debug过程,我们曾经怀疑过是我们没有实现需要实现的协议之类的。Anyway……最后的最后,我们发现是我写了一句SB的

[myTableView reloadData];

再看看我是怎么定义的吧:

@property(nonatomic,retain) IBOutlet UITableView *myTableView;
@synthesize myTableView = _myTableView;

好吧,这个地方的正确写法应该是:

[self.myTableView reloadData]

好吧,这是为什么呢?今天研究了一下,大概是这样的:在.h文件里面,我们做了一个声明,为了保持头文件的整洁,我们把其他的工作丢到了后面去做。那么在.m文件里面,我们做的事情就是把变量_myTableView和声明或者说属性myTableView关联起来了。当然,根据《Apress Begining Objective-C》中的介绍,在内部不会特殊操作变量的时候,我们可以只写:

@synthesize myTableView;

这样来确保我们调用了属性。那么为什么一开始是不对的呢。因为Objective-C采用特定的语法对类和实例应用方法:

[ClassOrInstance method];

那么myTableView本身并不是类或者实例,我们可以用:

[_myTableView reloadData]

来实现我们的功能。

 

 

 

posted on 2013-02-19 11:07  hibix  阅读(698)  评论(0编辑  收藏  举报

导航