2016-12-27 132 views
-1

我想填充在我的ViewController一个UITableView(它的UITableView的委托)的UITableView不显示内容

下面的代码是什么,我在网上找到。我做了一些改变,以便我不需要一个UITableViewController来使用它。但是,由于我改变了它,我无法弄清楚如何让文本在单元格中打印。在更改代码之前,让我的ViewcController子类成为UITableView的委托。任何人都可以将我指向正确的方向吗?

empty UITableView

我已经检查和XML被正确地分析。当代码到达在startParsing方法if (marrXMLData.count != 0)marrXMLData大于0(8是具体地,在我的XML项的正确和总数)

代码是从:http://www.theappguruz.com/blog/xmlparsing-with-nsxmlparser-tutorial

的.m低于

DisplayTableViewController 

@synthesize marrXMLData; 
@synthesize mstrXMLString; 
@synthesize mdictXMLPart; 

- (void)viewDidLoad{ 
    [super viewDidLoad]; 
    [self startParsing]; 
} 

- (void)startParsing{ 
    NSData *fileData = [NSData dataWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"file.xml"]]; 
    NSXMLParser *xmlparser = [[NSXMLParser alloc] initWithData:fileData]; 
    [xmlparser setDelegate:self]; 
    [xmlparser parse]; 
    if (marrXMLData.count != 0) { 
     [self.myUITableView reloadData]; 
    } 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict;{ 
    if([elementName isEqualToString:@"Content"]) 
     marrXMLData = [[NSMutableArray alloc] init]; 
    if([elementName isEqualToString:@"item"]) 
     mdictXMLPart = [[NSMutableDictionary alloc] init]; 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;{ 
    if(!mstrXMLString) 
     mstrXMLString = [[NSMutableString alloc] initWithString:string]; 
    else 
     [mstrXMLString appendString:string]; 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName;{ 

if([elementName isEqualToString:@"title"] || [elementName isEqualToString:@"url"]){ 

     [mdictXMLPart setObject:mstrXMLString forKey:elementName]; 

    } 
    if([elementName isEqualToString:@"item"]) 

     [marrXMLData addObject:mdictXMLPart]; 
     mstrXMLString = nil; 

    } 

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

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; 

    cell.textLabel.text = [[[marrXMLData objectAtIndex:indexPath.row] valueForKey:@"title"] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
    cell.detailTextLabel.text = [[[marrXMLData objectAtIndex:indexPath.row] valueForKey:@"url"] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 

    return cell; 
} 

@end 

编辑:

用它打的多一些不会被调用此方法后

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

在示例代码中,它被调用,但我不知道在哪里。 (对不起,我对iOS很新)

+0

你的问题太模糊,无法回答。 “我无法弄清楚如何让文字在标签上打印。”那是什么意思?什么文字?什么标签?你有正确数量的细胞吗?你是否在文本标签中获取内容,但不是详细文本标签,详细文本标签而不是文本标签,还是两者都不是?什么代码触发你的XML解析并填充你的XML数据数组? –

+0

这段代码假设'[xmlparser parse]'在[self.myUITableView reloadData]之前运行并完成,首先确保在解析完成后调用self.myUITableView reloadData,或者使用nslog或breakpoints,然后确保'marrXMLData'数组中有对象。一个quicjk但不好的修复会将你的'[self.myUITableView reloadData]'移到didEndElement'(void)解析器的末尾:(NSXMLParser *)解析器didStartElement' –

+0

你好@DuncanC我做了一些编辑来解释更好。我正在尝试在UITableView中填充单元格。标签将在单元格 – Airagale

回答

2

听起来好像你的表视图的委托和/或数据源链接没有连接。如果您在IB(界面构建器)中设置了表格视图场景,那么您只需控制 - 从表格视图拖动到视图控制器上。

+0

当你说控制+拖到视图控制器上,你的意思是在.h文件中为UITableView创建一个IBOutlet? – Airagale

+0

不。如果您选择表视图和正确的检查器(我忘记了它的名称,而且我不在我的Mac。Connections检查器中?),那么您将看到代理和数据源的项目。您需要在视图控制器的界面中添加一个条目,指出它符合UITableViewDataSource和UITableViewDelegate协议,然后从数据源拖放并将连接委托给视图控制器。 –

+0

我能够找到你在谈论的一个IB。我尝试点击并拖动数据源和委托给视图控制器,但它不会链接。而是我在我的viewDidLoad函数[myUITableView setDelegate:self]中以编程方式链接它;和[myUITableView setDataSource:self]; – Airagale