gpt4 book ai didi

iphone - UITableView 中的第二个 View 将不会显示从 JSON 解析的数据

转载 作者:行者123 更新时间:2023-11-29 04:12:50 24 4
gpt4 key购买 nike

我有一个来自 JSON 文件的解析数据。它在我的 UITableView 的第一个 View 中就像一个魅力。但是,当我点击某个项目时,它会显示空白的第二个 View 。

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

}

信息 View .h

@interface InformationViewController : UITableViewController

@property (nonatomic, strong) NSArray * Information;

@end

信息 View .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;
}

最佳答案

在这里我发布了另一个答案只是因为我不想产生困惑。

The Project Code : http://www.cogzentappz.com/demo/iostutorial/TestJson.zip

不要传递选定的值,而是通过 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];


}

在下一个 View 中,您可以使用以下方法检索数据。 在 informationViewcontrollerViewDidLoad 中使用此

//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.bloople.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);
}

关于iphone - UITableView 中的第二个 View 将不会显示从 JSON 解析的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14171315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com