gpt4 book ai didi

iOS XML 解析,在 TableView 上显示结果并推送到新的 TableView

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

我的应用程序的目标是解析一些 XML,在 TableView 中显示 xml 的一个元素,然后让用户单击该单元格,然后它会推送到一个新的 TableView ,其中包含该元素的其余数据被展示。仅显示列表的第一个 TableView 工作正常,但由于某种原因,我无法推送到新的 View Controller 来工作。下面是我正在使用的代码。第一个 View Controller 显示在 TableView 中;当前调用类型。我希望用户能够单击该表格单元格,然后推送到一个新的表格 View ,其中显示单位、车站和位置。任何帮助都是极好的!谢谢。

第一个表格 View 的 View Controller :

#import "ThirdViewController.h"
#import "UnitsXMLParser.h"
#import "DetailViewController"

@implementation ThirdViewController
@synthesize unitsTableView;
@synthesize currentCallType, station, location, units;

XMLParser1 *xmlParser;

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}

#pragma mark -
#pragma mark Table view data source

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

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

static NSString *CellIdentifier = @"Cell";

Units *currentCall = [[xmlParser units] objectAtIndex:indexPath.row];

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];

}

// Set up the cell...
cell.textLabel.text = [currentCall currentCallType];

return cell;

}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 55;
}

#pragma mark -
#pragma mark Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {


DetailViewController *detail = [self.storyboard instantiateViewControllerWithIdentifier:@"detail"];
[self.navigationController pushViewController:detail animated:YES];

}


#pragma mark - View lifecycle

- (void)viewDidLoad
{
[super viewDidLoad];

xmlParser = [[XMLParser1 alloc] loadXMLByURL:@"http://localhost:8888/units.xml"];

}

XML 解析器:

#import <Foundation/Foundation.h>
#import "UnitsXMLParser.h"

@implementation XMLParser1
@synthesize units = _units;


NSMutableString *currentNodeContent;
NSXMLParser *parser;
Units *currentCall;
bool isStatus;

-(id) loadXMLByURL:(NSString *)urlString
{
_units = [[NSMutableArray alloc] init];
NSURL *url = [NSURL URLWithString:urlString];
NSData *data = [[NSData alloc] initWithContentsOfURL:url];
parser = [[NSXMLParser alloc] initWithData:data];
parser.delegate = self;
[parser parse];
return self;
}

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
currentNodeContent = (NSMutableString *) [string stringByReplacingOccurrencesOfString:@"~" withString:@""];
}

- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementname isEqualToString:@"station"])
{
currentCall = [Units alloc];
isStatus = YES;
}
}

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI: (NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if (isStatus)
{
if ([elementname isEqualToString:@"units"])
{
currentCall.units = currentNodeContent;
}
if ([elementname isEqualToString:@"name"])
{
currentCall.currentCallType = currentNodeContent;
}
if ([elementname isEqualToString:@"stationid"])
{
currentCall.station = currentNodeContent;
}
if ([elementname isEqualToString:@"address"])
{
currentCall.location = currentNodeContent;
}
}
if ([elementname isEqualToString:@"station"])
{
[self.units addObject:currentCall];
currentCall = nil;
currentNodeContent = nil;
}
}
@end

最佳答案

远景;但是您的项目是否配置为使用 UINavigationController ?除非您从正确的项目模板开始或手动添加 UINavigationController ,否则您的 View Controller 不会包含在 UINavigationController 中或由 UINavigationController 管理。如果包含您发布的代码的 View Controller 不受导航 Controller 支持,则 [self.navigationController PushViewController:detailanimated:YES] 将不执行任何操作。

此外,请确保除了 UITableViewDataSource 之外还连接了 UITableViewDelegate ,以便您的代码能够捕获行选择。

我之所以这么问,是因为您没有明确声明您已将项目设置为使用 UINavigationController 或确认您已在 Interface Builder 中连接了委托(delegate)和数据源。

关于iOS XML 解析,在 TableView 上显示结果并推送到新的 TableView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12116693/

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