我有来自JSON文件的解析数据。它在我的UITableView的第一个视图中就像一个魅力。但是,当我点击某个项目时,它会显示一个空白的第二个视图。
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;
}
答案 0 :(得分:1)
在这里,我发布了另一个答案,因为我不想产生混淆。
The Project Code: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
的{{1}}中使用此
informationViewcontroller
根据您的链接Json输出如下:
//reading
NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
NSArray *arrayObj = [standardDefaults objectForKey:@"longArray"];
for(int i = 0 ; i<[arrayObj count] ; i++) {
NSLog(@"String is %@",[arrayObj objectAtIndex:i]);
}
转到链接:http://json.bloople.net并发布所有json输出并按Enter键。
所以你必须根据那种格式获得价值。
NSArray-->NSDictionary-->NSArray-->NSDictionary-->NSArray-->NSDictionary
答案 1 :(得分: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];
}
希望它对你有所帮助......
答案 2 :(得分:0)
我认为您在获取数据后必须重新加载数据。现在,您指定NSArrray *json
为空,因为计数返回0.因此,您禁止填充表视图。获取数据后请致电[tableView reloadData];
。