def json = {
def jsonData=[["name":"任天堂","hard":"wii"],
["name":"sony","hard":"PlayStation3"],
["name":"Microsoft","hard":"XBOX360"]]
render(text:jsonData as JSON)
}
ブラウザで確認すると、こんな感じのJSONデータが返ります。
[{"name":"任天堂","hard":"wii"},{"name":"sony","hard":"PlayStation3"},{"name":"Microsoft","hard":"XBOX360"}]
これをiPhoneでうけとってTableViewに表示します。
JSONを取得する部分
- (void)getJSON {
NSURL *jsonURL = [NSURL URLWithString:@"http://localhost:8080/jsonSample/test/json"];
NSMutableString *jsonData = [NSMutableString stringWithContentsOfURL:jsonURL encoding:NSUTF8StringEncoding error:nil];
[jsonData replaceOccurrencesOfString:@"'"
withString:@"\""
options:NSCaseInsensitiveSearch
range:NSMakeRange(0,[jsonData length])];
NSLog(jsonData);
if (jsonData == nil) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Webservice Error" message:@"JSON Dataの取得に失敗しました。" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
[alert show];
[alert release];
} else {
SBJSON *json = [SBJSON new];
json.humanReadable = YES;
id result = [jsonData JSONValue];
NSLog([json stringWithObject:result error:NULL]);
webResult = [[NSMutableArray alloc] init];
NSEnumerator* enumerator;
enumerator = [result objectEnumerator];
// while文を使って要素にアクセスする
id obj;
while (obj = [enumerator nextObject]) {
[webResult addObject:obj];
}
printf("データ件数 %d",[webResult count]);
}
}
基本は前と一緒です。シングルクォートをダブルクォートに置換したりしてます。
webResultはクラスのフィールドです。
取得した値をループし、webResultへ追加していきます。
InterfaceBuilderでTableViewをおいて、Outletとdelegateを設定します。
dataSource、delegateをFile'sOwnerに設定し、クラスに定義したtableViewと連結します。
クラスにtableView用の定義をします。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [webResult count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell;
cell = [[UITableViewCell alloc] init];
cell.text = [[webResult objectAtIndex:indexPath.row] objectForKey:@"name"];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"あなたが選んだのは"
message:[[webResult objectAtIndex:indexPath.row] objectForKey:@"hard"]
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles: nil];
[alert show];
[alert release];
}
上から順番に
numberOfRowsInSection : テーブルに何件あるかを返すメソッド
cellForRowAtIndexPath : 1行毎に表示するメソッド
didSelectRowAtIndexPath : 行を選択した時のアクション
です。
詳細はメモなんで略 :p
0 件のコメント:
コメントを投稿