Ios self.tableview在应用程序连接到internet后重新加载不工作

Ios self.tableview在应用程序连接到internet后重新加载不工作,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我知道这个问题已经被多次提出,但似乎我无法找到解决我的问题的办法。我有一个应用程序,它在一个视图控制器中有一个容器视图控制器,它是一个表视图控制器。在此表视图中加载了一些rss提要。当我在没有互联网连接的情况下打开我的应用程序时,我的数据不会显示,但在我将我的应用程序连接到互联网后,我的表应该在我拉下表后重新加载,但它不会。我尝试了很多方法,但都找不到解决办法。我张贴我的代码,所以如果有人可以帮助我,我将不胜感激。多谢各位 - (void)viewDidLoad { [super viewDid

我知道这个问题已经被多次提出,但似乎我无法找到解决我的问题的办法。我有一个应用程序,它在一个视图控制器中有一个容器视图控制器,它是一个表视图控制器。在此表视图中加载了一些rss提要。当我在没有互联网连接的情况下打开我的应用程序时,我的数据不会显示,但在我将我的应用程序连接到互联网后,我的表应该在我拉下表后重新加载,但它不会。我尝试了很多方法,但都找不到解决办法。我张贴我的代码,所以如果有人可以帮助我,我将不胜感激。多谢各位

- (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的帮助下解决了。谢谢。