-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 に答える