iPhone上的JSON(三)JSON+UITableView

鉴客 发布于 2011/12/03 20:40
阅读 906
收藏 0

既然JSON这么好,它怎么和UITableView结合使用呢?

首先看看我们的JSON文件吧:

{
	"老张家":["大张","二张","三张"],
	"老李家":["大李","二李"]
}

完成的作品是这样样子的~~(点击放大阿~~)

屏幕快照 2009-08-10 下午02.38.49

好,开始打代码吧。

1,首先copy JSON库到当前的Project里面。

屏幕快照 2009-08-10 下午02.50.52

2,建立一个数据源类。我给它起名叫MyDataSource, 看看里面都有什么吧:

@interface MyDataSource : NSObject {} + (id)dataSource;@end  #import "JSON.h"  @implementation MyDataSource+ (id)dataSource{ 	NSString* JSONString = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"data" ofType:@"json"] 							 encoding:NSUTF8StringEncoding error:nil];
	return [JSONString JSONValue];} @end

里面非常简单,只有一个类方法dataSource。在其中我们读取json文件的内容到一个NSString中,并用JSON框架来解读成一个 NSDictionary,返回值为id。因为虽然大多的时候最外的对象都为NSDictionary,但是出于严谨,万一是NSArray不就崩溃了。所以使用id,这样其实就有再次可以用的特性了。

3,建立一个UITableViewController, 然后作适当的设置:

#import "MyTableViewController.h" #import "MyDataSource.h"  @implementation MyTableViewController
 - (id)initWithStyle:(UITableViewStyle)style{ 	if (self = [super initWithStyle:style]) { 		myData = [[MyDataSource dataSource] retain];
		//在这里我们初始化myData,其实就是一个id对象 		//传入由MyDataSource解析出的NSDictionary 	} 	return self;}  #pragma mark Table view methods  - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {     return [myData count];    //有多少个section,也就是“几家” }  - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {     return [[myData valueForKey:[[myData allKeys] objectAtIndex:section]] count];//这里我们需要告诉UITableViewController每个section里面有几个,也就是“一家里面有几口人” }  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {  
    static NSString *CellIdentifier = @"Cell";
 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {         cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                                reuseIdentifier:CellIdentifier] autorelease];
    }    //上面的东西都是重复白给的,平时没事不用想为什么,照抄就可以了 	cell.textLabel.text = [[myData valueForKey:[[myData allKeys] objectAtIndex:indexPath.section]] objectAtIndex:indexPath.row];
	//这句看上去复杂,但是其实不过是在特定section里面找到对应的array, 	//然后在array中找到indexPath.row所在的内容     return cell;}  - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{ 	return [[myData allKeys] objectAtIndex:section];//这里设置对应section的名字,很简单allKey返回所有的键值为一个array,也就是“张家”,“李家” //然后用objectAtIndex: 来找出究竟是哪一个就可以了! }  - (void)dealloc {     [myData release]; //“我们是runtime的好市民”...release就好Alan......     [super dealloc];} @end

4,在主程序代理 xxxAppDelegate 里面初始化这个UITableViewController然后添加它的view到window的subview中就OK拉!

5,编译运行,没有错误就万事大吉!大吉!

阿弥陀佛,祝各位愉快~

加载中
0
osc_948590
osc_948590
不错,学习了。。。感谢分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部