Ios self.tableview在应用程序连接到internet后重新加载不工作
我知道这个问题已经被多次提出,但似乎我无法找到解决我的问题的办法。我有一个应用程序,它在一个视图控制器中有一个容器视图控制器,它是一个表视图控制器。在此表视图中加载了一些rss提要。当我在没有互联网连接的情况下打开我的应用程序时,我的数据不会显示,但在我将我的应用程序连接到互联网后,我的表应该在我拉下表后重新加载,但它不会。我尝试了很多方法,但都找不到解决办法。我张贴我的代码,所以如果有人可以帮助我,我将不胜感激。多谢各位Ios self.tableview在应用程序连接到internet后重新加载不工作,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我知道这个问题已经被多次提出,但似乎我无法找到解决我的问题的办法。我有一个应用程序,它在一个视图控制器中有一个容器视图控制器,它是一个表视图控制器。在此表视图中加载了一些rss提要。当我在没有互联网连接的情况下打开我的应用程序时,我的数据不会显示,但在我将我的应用程序连接到互联网后,我的表应该在我拉下表后重新加载,但它不会。我尝试了很多方法,但都找不到解决办法。我张贴我的代码,所以如果有人可以帮助我,我将不胜感激。多谢各位 - (void)viewDidLoad { [super viewDid
- (void)viewDidLoad {
[super viewDidLoad];
feeds = [[NSMutableArray alloc] init];
NSURL *url = [NSURL URLWithString:@"http://url"];
parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[parser setDelegate:self];
[parser setShouldResolveExternalEntities:NO];
[parser parse];
Reachability *networkReachability = [Reachability reachabilityForInternetConnection];
NetworkStatus networkStatus = [networkReachability currentReachabilityStatus];
self.tableView.dataSource = self;
self.tableView.delegate = self;
if (networkStatus == NotReachable)
{
number = 0;
}
else{
number = 1;
}
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
num = 5;
}
else{
num = feeds.count;
}}
这些是我调用表的主要方法
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return number;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if(feeds.count > num){
return num + 1;
}
return num;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
cell.textLabel.text = [[feeds objectAtIndex:indexPath.row] objectForKey: @"title"];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.userInteractionEnabled = YES;
// Set up the cell
[cell.textLabel setFont:[UIFont fontWithName:@"Verdana" size:15]];
[cell.textLabel setNumberOfLines:2];
[cell.detailTextLabel setFont:[UIFont fontWithName:@"Verdana" size:12]];
cell.textLabel.text = [[feeds objectAtIndex:indexPath.row] objectForKey: @"title"];
}
return cell;
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
element = elementName;
if ([element isEqualToString:@"item"]) {
item = [[NSMutableDictionary alloc] init];
title = [[NSMutableString alloc] init];
link = [[NSMutableString alloc] init];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@"item"]) {
[item setObject:title forKey:@"title"];
[item setObject:link forKey:@"link"];
[feeds addObject:[item copy]];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if ([element isEqualToString:@"title"]) {
[title appendString:string];
} else if ([element isEqualToString:@"link"]) {
[link appendString:string];
}
}
- (void)parserDidEndDocument:(NSXMLParser *)parser {
[self.tableView reloadData];
}
这是我在下拉后重新加载数据的地方
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
CGPoint targetPoint = *targetContentOffset;
CGPoint currentPoint = scrollView.contentOffset;
if (targetPoint.y > currentPoint.y) {
[self.tableView reloadData];
}}
您是否将实现ScrollViewWillendDraging的类声明为实现UIScrollViewDelegate?尝试在事件处理程序中放置一个断点,并在下拉列表时查看代码是否正在执行
编辑:只有在首次加载视图时才更新number变量,并且在没有internet时将其初始化为0。因此,您永远不会得到任何行,因为没有显示它的部分。scrollViewWIllEndDraggin中的我的代码是正常执行的。我在那里放了一个NSLog,还有一个断点,看看会发生什么,它运行得很好。你有没有在重新加载表时检查feeds对象,看看它是否包含有效数据?我还注意到,任何地方都没有item的声明,这是一个实例变量吗?如果通过internet连接,我可以从一开始就加载并显示它们,那么数据是否可能无效。但是,当我在一开始没有连接互联网的情况下打开应用程序,然后我连接到它时,它是无效的??哦,我知道你做错了什么。您仅在第一次加载视图时检查internet的可访问性。因此,无论何时调用reloadData,都会得到number=0。换句话说,无论您重新加载数据多少次,您都不会得到任何行,因为您的节数始终将返回0。是的!!你是对的。我必须再次检查它,并将变量号更改为1。我以前已经做过了,但是我犯了一个错误,我没有太注意,因为我认为这是同一件事,但事实并非如此。所以我现在再次进行了可达性检查,我发现错误是这样的:-UITableViewCell*tableView:UITableView*tableView cellForRowAtIndexPath:NSIndexPath*indexPath。我不得不再次添加解析器的声明,我在viedidload中有这个声明。它是否正确?是什么触发了将数据从网络加载到提要数组中的实际操作?它是一个RSS提要。但我在Edward L的帮助下解决了。谢谢。