Ios UITableView不显示内容
我试图在我的viewcontroller中填充UITableView(它是UITableView的代理) 下面的代码是我在网上找到的。我做了一些更改,因此不需要UITableViewController来使用它。但是,由于我更改了它,我无法弄清楚如何在单元格中打印文本。在更改代码以允许我的ViewcController子类成为UITableView的委托之前。谁能给我指一下正确的方向吗 我已经检查过了,XML正在正确解析。当代码到达Ios UITableView不显示内容,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我试图在我的viewcontroller中填充UITableView(它是UITableView的代理) 下面的代码是我在网上找到的。我做了一些更改,因此不需要UITableViewController来使用它。但是,由于我更改了它,我无法弄清楚如何在单元格中打印文本。在更改代码以允许我的ViewcController子类成为UITableView的委托之前。谁能给我指一下正确的方向吗 我已经检查过了,XML正在正确解析。当代码到达startParsing方法中的if(marrXMLData.
startParsing
方法中的if(marrXMLData.count!=0)
时,marrXMLData
大于0(具体为8,即我的XML中正确的项目总数)
代码来自:
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非常陌生)听起来您的表视图的委托和/或数据源链接没有连接。如果在IB(Interface Builder)中设置表视图场景,则只需控制从表视图到视图控制器的拖动 你的问题太模糊,无法回答。“我不知道如何在标签上打印文字。”这是什么意思?什么文本?什么标签?你有正确的电池数量吗?您是在文本标签中获取内容而不是在详图文本标签中获取内容,还是在详图文本标签中获取内容而不是在文本标签中获取内容,或者两者都不获取内容?什么代码触发XML解析并填充XML数据数组?此代码假定
[xmlparser parse]
在[self.myUITableView reloadData]
之前运行并完成,首先确保在解析完成后调用self.myUITableView reloadData
,使用nslog或断点,然后确保marrXMLData
数组中有对象。一个简单但错误的修复方法是将您的[self.myUITableView reloadData]
移动到didEndElement的末尾(void)parser:(NSXMLParser*)parser didStartElement
Hello@duncan我做了一些编辑以更好地解释。我试图在UITableView中填充单元格。标签将在cell@u.genmarrXMLData中确实有对象!我编辑了我的问题,以解释运行代码时看到的更多内容。@Airagale脚本中的单元格标识符设置为什么?运行时,[marrXMLData count]
的值是多少?当您说control+拖到视图控制器上时,您的意思是在.h文件中为UITableView创建一个IBOutlet吗?否。如果您选择了表视图和正确的检查器(我忘记了它的名称,我不在Mac.Connections检查器旁?)然后,您将看到代理和数据源的一项。您需要在视图控制器的界面中添加一个条目,指示它符合UITableViewDataSource和UITableViewDelegate协议,然后从数据源和代理连接拖动到视图控制器上。我在IB中找到了您正在谈论的内容。我尝试单击并将数据源和代理拖动到视图控制器,但它无法链接。相反,我在viewDidLoad函数[myUITableView setDelegate:self]中以编程方式链接了它;和[myUITableView setDataSource:self];我很高兴你明白了。请注意,可以使用容器视图和嵌入序列在视图控制器中嵌入UITableViewController。然后你就可以得到一个表视图控制器的优点,它不需要填满屏幕。这就是我所做的——这就是为什么我会遇到这样的问题。我使用的示例使用了UITableViewController,我想要一个内部带有UITableView的ViewController。该示例未设置数据源或委托。