iPhone利用JSON传递数据
(2011-10-17 17:29:33)iPhone利用JSON传递数据,展示在Table界面中
json不必多说了,在手机开发中,客户端和服务器端开发经常使用的数据交互模式。Iphone中利用json传递的数据,可以非常容易的展示到各个容器中。下面是一个最简单的例子。效果如图:
上面用到了json传递的数据,有关json部分,iphone sdk虽然没有支持,但是第三方已经写好了。
json 参考:http://code.google.com/p/json-framework/
下面是具体的代码实现:
数据加载:
#import
“MyDataSource.h” #import
“JSON.h”
@implementation
MyDataSource + (NSDictionary
*)fetchLibraryInformation {
NSString
*urlString = [NSStringstringWithFormat:@"http://wangjun.easymorse.com/wp-content/video/hello.jison"]; NSURL
*url = [NSURL URLWithString:urlString]; NSLog(@”fetching library data”);
return
[self fetchJSONValueForURL:url]; }
+ (id)fetchJSONValueForURL:(NSURL
*)url {
NSString
*jsonString = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding
error:nil];
id
jsonValue = [jsonString JSONValue]; [jsonString
release]; return
jsonValue; }
@end
table数据展示:
#import
“JSONTableTestViewControl ler.h” #import
“MyDataSource.h”
@implementation
JSONTableTestViewControl ler
@synthesize
myData; - (void)viewDidLoad {
NSLog(@”加载数据“);
myData
= [[MyDataSource fetchLibraryInformation] retain]; }
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn’t have a superview.
[super
didReceiveMemoryWarning];
// Release any cached data, images, etc that aren’t in use.
}
- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (NSInteger)numberOfSectionsInTableV
iew:(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 = [tableViewdequeueReusableCellWithI dentifier:CellIdentifier]; if
(cell == nil) { cell = [[[UITableViewCell
alloc]initWithStyle:UITableViewCellStyleDefa ult 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]; [super
dealloc]; }
@end