【问题标题】:iOS XML Parsing, display results on table view and pushing to a new tableviewiOS XML 解析,在表格视图上显示结果并推送到新的表格视图
【发布时间】:2012-08-20 10:45:42
【问题描述】:

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

第一个 tableview 的视图控制器:

#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

【问题讨论】:

  • 您的代码中没有任何推送...?
  • 我意识到我没有推动力,我正在寻找帮助我的人。我一直在使用的东西不起作用。
  • 我在上面编辑了我的代码以添加我一直在使用的推送。
  • 您的问题是当您在第一个 tableViewController 中点击表格单元格时没有任何反应?或者当您的应用转换到详细视图控制器时,那里没有数据出现?
  • 我点击表格单元格并没有任何反应。

标签: ios xcode xml-parsing tableview pushviewcontroller


【解决方案1】:

远射;但是您是否将项目配置为使用 UINavigationController ?除非您从正确的项目模板开始或手动添加 UINavigationController ,否则您的视图控制器将不会包含在 UINavigationController 中/由 UINavigationController 管理。如果包含您发布的代码的视图控制器没有导航控制器支持, [self.navigationController pushViewController:detail animated:YES] 将什么也不做。

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

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

【讨论】:

  • 否,该项目是通过情节提要建立在选项卡式应用程序上的。所以基本上我要做的就是向 UINavigationController 添加一个选项卡,然后它将控制我的两个视图控制器?
  • UINavigationController 是 UIViewController 的子类。如果您使用选项卡式应用程序模板来设置项目,则 UITabBarController 的设置在您的应用程序委托中,因此您将在那里进行配置。将您的 UIViewController 包装在 UINavigationController 中,并将该 UINavigationController 传递给 UITabBarController。阅读 UINavigationController 上的文档; init 方法接受一个根视图控制器,您需要了解 UINavigationController 的各种组件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-12
  • 1970-01-01
相关资源
最近更新 更多