应用程序连接到互联网后,self.tableview重新加载无法正常工作

时间:2014-12-03 21:23:57

标签: ios objective-c uitableview

我知道已经多次说过这个问题,但似乎我无法找到解决方案。我有一个应用程序,它在视图控制器内部有一个容器视图控制器,它是一个表视图控制器。在此表视图中加载了一些rss feed。当我打开我的应用程序没有互联网连接我的数据没有出现,但在我将我的应用程序连接到互联网后,我的表应该在我拉下表后重新加载,但事实并非如此。我尝试了很多东西,但我找不到解决方案。我发布我的代码,所以如果有人可以帮助我会很感激。谢谢。

- (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];
}}

1 个答案:

答案 0 :(得分:0)

您是否将实现scrollViewWillEndDragging的类声明为实现UIScrollViewDelegate?尝试在该事件处理程序中放置一个断点,并在下拉列表时查看代码是否正在执行。

编辑:您只是在第一次加载视图时更新number变量,并且只要没有互联网,您就会将其初始化为0。因此,您永远不会获得任何行,因为没有任何部分可以显示它。