0

私のアプリケーションの目標は、XMLを解析し、xmlの1つの要素をテーブルビューに表示してから、ユーザーにセルをクリックしてもらうことです。新しいテーブルビューにプッシュすると、その要素の残りのデータが表示されます。リストのみを表示する最初のテーブルビューは正常に機能しますが、何らかの理由で、新しいViewControllerへのプッシュを機能させることができません。以下は私が使用しているコードです。最初のViewControllerはテーブルビューで表示されます。currentCallType。ユーザーがそのテーブルセルをクリックしてから、新しいテーブルビューにプッシュして、ユニット、ステーション、および場所を表示できるようにします。どんな助けでも素晴らしいでしょう!ありがとう。

最初のテーブルビューのビューコントローラ:

#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
4

1 に答える 1

1

ロングショット。しかし、プロジェクトで?を使用するように構成されています UINavigationController か?正しいプロジェクトテンプレートから開始するか、手動でを追加しない限り、ビューコントローラはUINavigationControllerに含まれず、UINavigationControllerによって管理されません UINavigationController 。投稿されたコードを含むViewControllerがNavigationControllerによってサポートされていない場合、 [self.navigationController pushViewController:detail animated:YES] 何もしません。

また、コードが行の選択をキャッチできるように、 UITableViewDelegate に加えてを接続していることを確認してください。 UITableViewDataSource

UINavigationController を使用するようにプロジェクトを設定したこと、またはInterfaceBuilderでデリゲートとデータソースの両方を接続したことを確認したことを明示的に述べていないためです。

于 2012-08-24T22:16:51.677 に答える