-1

任何人都可以为我提供任何可点击表格视图的 JSON 字符串的好例子吗?

我正在从服务器获取带有任务的 json 字符串(已经在工作),我需要用 tableview 发布它。但它应该能够单击并给出该行的消息。json结构:

{ "messages":[{  
   "id": ....,  
   "msg":....,  
   "special":...,  
   "comments":...}]}

有什么好的例子吗?

4

3 回答 3

0

我发现这个视频对学习非常有用。

http://www.youtube.com/watch?v=9MEnvlqP-wU

还要检查我经常问的一些关于 JSON 的问题,但视频是前进的好方法。

更多链接:)

http://www.youtube.com/watch?v=YggsvQC2SH0

http://www.youtube.com/watch?v=RJZcD3hfs3k

于 2013-02-22T13:45:02.097 回答
0

这是您要执行的操作的代码。如果您愿意,您可以修改为以不同的方式查看,如果这是正确的,或者您是否希望通过其他方式显示消息,请告诉我。

//
//  MyViewController.h
//  Test
//
//  Created by Syed Arsalan Pervez on 2/22/13.
//  Copyright (c) 2013 SAPLogix. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MyViewController : UITableViewController
{
    NSArray *_messages;
}

@end



//
//  MyViewController.m
//  Test
//
//  Created by Syed Arsalan Pervez on 2/22/13.
//  Copyright (c) 2013 SAPLogix. All rights reserved.
//

#import "MyViewController.h"

@interface MyViewController ()

@end

@implementation MyViewController

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSString *JSONString = @"{\"messages\":[{\"id\":\"1\",\"msg\":\"Message Line\",\"special\":\"Special Line\",\"comments\":\"Comments Line\"},{\"id\":\"2\",\"msg\":\"Message Line\",\"special\":\"Special Line\",\"comments\":\"Comments Line\"}]}";

    NSError *error = nil;
    NSDictionary *JSONObj = [NSJSONSerialization JSONObjectWithData:[JSONString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:&error];
    if (!error)
    {
        _messages = [[JSONObj valueForKey:@"messages"] retain];
    }
    else
    {
        NSLog(@"Error: %@", error);
    }

    [self.tableView reloadData];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return [_messages count];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return  3;
}

- (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];
    }

    NSDictionary *_message = [_messages objectAtIndex:indexPath.section];
    switch (indexPath.row)
    {
        case 0:
            cell.textLabel.text = [_message valueForKey:@"msg"];
            break;

        case 1:
            cell.textLabel.text = [_message valueForKey:@"special"];
            break;

        case 2:
            cell.textLabel.text = [_message valueForKey:@"comments"];
            break;
    }
    _message = nil;

    return cell;
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    NSDictionary *_message = [_messages objectAtIndex:section];
    return [NSString stringWithFormat:@"Message %@", [_message valueForKey:@"id"]];
}

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    NSDictionary *_message = [_messages objectAtIndex:indexPath.section];
    NSMutableString *string = [NSMutableString new];
    [string appendFormat:@"Message %@: ", [_message valueForKey:@"id"]];
    switch (indexPath.row)
    {
        case 0:
            [string appendString:[_message valueForKey:@"msg"]];
            break;

        case 1:
            [string appendString:[_message valueForKey:@"special"]];
            break;

        case 2:
            [string appendString:[_message valueForKey:@"comments"]];
            break;
    }
    _message = nil;

    [[[[UIAlertView alloc] initWithTitle:@"Alert" message:string delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil] autorelease] show];
    [string release];
}

- (void)dealloc
{
    [_messages release];

    [super dealloc];
}

@end

输出:

在此处输入图像描述

于 2013-02-22T15:28:19.203 回答
-1

您必须使用库(如SBJson )解析该 JSON 响应,然后从您的数据创建数组或字典,并使用此字典和数组来填充您的表格视图。

如果您可以提供您的 json 响应,那么我可以帮助您解析它。

我添加了一些显示解析的代码片段:

SBJsonParser *jsonParser = [SBJsonParser new];
NSDictionary *jsonData = (NSDictionary *) [jsonParser objectWithString:responseData error:nil];


            //to display driver name in drop down

            NSArray * messagesArray = [[NSArray alloc]init];
            messagesArray= [jsonData objectForKey:@"messages"];


            for(int i=0;i<[driverNameArray count];i++)
            {
                NSDictionary *tempDictionary = [messagesArray objectAtIndex:i];
                if([tempDictionary objectForKey:@"id"]!=nil)
                {

                    [idAry addObject:[tempDictionary objectForKey:@"id"]];

                }
                if([tempDictionary objectForKey:@"msg"]!=nil)
                {

                    [msgAry addObject:[tempDictionary objectForKey:@"msg"]];

                }
                if([tempDictionary objectForKey:@"special"]!=nil)
                {

                    [specialAry addObject:[tempDictionary objectForKey:@"special"]];

                }
                if([tempDictionary objectForKey:@"comments"]!=nil)
                {

                    [commentsAry addObject:[tempDictionary objectForKey:@"comments"]];

                }

            }

我使用过的所有数组 commentsAry、specialAry、msgAry、idAry 保存您的数据,并可用于填充 tableview。

于 2013-02-22T13:58:33.897 回答