0

JSONファイルから解析されたデータがあります。私のUITableViewの最初のビューでは魅力のように機能します。ただし、アイテムをタップすると、空白の 2 番目のビューが表示されます。

MasterView.h

@interface MasterViewController : UITableViewController
{
    NSArray *json;
}

@property (nonatomic, retain) NSArray *json;

@end

MasterView.m

#import "MasterViewController.h"
#import "InformationViewController.h"

@interface MasterViewController ()

@end

@implementation MasterViewController

@synthesize json;

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSData *jsonData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://j4hm.t15.org/ios/console.php"]];
    [self performSelectorOnMainThread: @selector(fetchedData:) withObject: jsonData waitUntilDone: YES];
}

- (void)fetchedData:(NSData *)responseData
{
    NSError *error;

    self.json = [NSJSONSerialization JSONObjectWithData: responseData options: kNilOptions error: &error];

    NSLog(@"String is %@", self.json);
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [json count];
}

// Customize the appearance of table view cells.
- (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];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    }

    cell.textLabel.text = [[json objectAtIndex: indexPath.row] objectForKey: @"Console"];

    [cell setAccessoryType: UITableViewCellAccessoryDisclosureIndicator];

    return cell;
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    InformationViewController *informationViewController = [[InformationViewController alloc] initWithStyle:UITableViewStylePlain];

    informationViewController.title  = [[json objectAtIndex: indexPath.row] objectForKey: @"Console"];
    informationViewController.Information = [[json objectAtIndex: indexPath.row] objectForKey: @"Model"];

    NSLog(@"String is %@", informationViewController.Information);

    [self.navigationController pushViewController: informationViewController animated:YES];

}

InformationView.h

@interface InformationViewController : UITableViewController

@property (nonatomic, strong) NSArray * Information;

@end

InformationView.m

@interface InformationViewController ()

@end

@implementation InformationViewController

@synthesize Information;

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

    // Configure the cell...

    cell.textLabel.text = [[Information objectAtIndex: indexPath.row] objectForKey: @"Model"];

    [cell setAccessoryType: UITableViewCellAccessoryDisclosureIndicator];

    return cell;
}
4

3 に答える 3

1

ここで、混乱を引き起こしたくないという理由だけで、別の回答を投稿しました。

プロジェクト コード: http://www.cogzentappz.com/demo/iostutorial/TestJson.zip

選択した値を渡す代わりに、全体Arrayを渡し、NSUsedDefaults次のコードを使用してそれらを取得します。

  - (void)fetchedData:(NSData *)responseData
    {
        NSError *error;

        self.json = [NSJSONSerialization JSONObjectWithData: responseData options: kNilOptions error: &error];

        NSLog(@"String is %@", self.json);

     NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
        NSMutableArray *arrayObj = [[NSMutableArray alloc] init];


        for(int i = 0 ; i<[self.json count] ; i++) {
            [arrayObj addObject:[json objectAtIndex:i]]];
        }

        [standardDefaults setObject:arrayObj forKey:@"longArray"];
        [arrayObj release];


    }

次のビューでは、Below メソッドを使用してデータを取得できます。ViewDidLoad使用中informationViewcontrollerこれ

//reading

NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
NSArray *arrayObj = [standardDefaults objectForKey:@"longArray"];


for(int i = 0 ; i<[arrayObj count] ; i++) {
        NSLog(@"String is %@",[arrayObj objectAtIndex:i]);
    }

あなたのリンクによると、Jsonの出力は以下のようになります:

NSArray-->NSDictionary-->NSArray-->NSDictionary-->NSArray-->NSDictionary

http://json.blople.netのリンクに移動し、すべての json 出力を投稿して Enter キーを押します。

したがって、その形式に従って値を取得する必要があります。

for(int i = 0 ; i<[self.json count] ; i++) {
 NSArray *info_Array=[[self.json objectAtIndex:i ]valueForKey:@"Information"];
    NSLog(@"info_Array is %@", info_Array);

    for(int j = 0 ; j<[info_Array count] ; j++)
    {

        NSLog(@"Model is %@", [[info_Array objectAtIndex:j ]valueForKey:@"Model"]);
        NSArray *title_Array=[[info_Array objectAtIndex:j ]valueForKey:@"Title"];
        for(int k = 0 ; k<[title_Array count] ; k++)
        {
            NSLog(@"Game is %@", [[title_Array objectAtIndex:k ]valueForKey:@"Game"]);
            NSLog(@"Publisher is %@", [[title_Array objectAtIndex:k ]valueForKey:@"Publisher"]);
        }

    }

    NSString *Console_string= [[dataArray objectAtIndex:i ]valueForKey:@"Console"];
    NSLog(@"String is %@", Console_string);

}

NSString *Console_string= [[self.Json objectAtIndex:i ]valueForKey:@"Console"];
NSLog(@"String is %@", Console_string);
}
于 2013-01-06T10:02:45.037 に答える
0

データを取得した後、reloadData を実行する必要があると思います。ここでは、count が 0 を返すため、 が空であることを指定しますNSArrray *json。したがって、テーブル ビューがいっぱいになるのを禁止します。[tableView reloadData];データをフェッチした後に呼び出します。

于 2013-01-05T11:53:29.587 に答える
0

これで MaterView.m のコードを変更します

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
InformationViewController *informationViewController = [[InformationViewController alloc] initWithStyle:UITableViewStylePlain];
informationViewController.title  = [[json objectAtIndex: indexPath.row] objectForKey: @"Console"];
informationViewController.Information = [[json objectAtIndex: indexPath.row] objectForKey: @"Model"];
NSLog(@"String is %@", informationViewController.Information);
[self.navigationController pushViewController: informationViewController animated:YES];
}

お役に立てば幸いです...

于 2013-01-05T11:43:04.933 に答える