为什么我的iOS刷新控制器不工作?

时间:2014-02-08 02:36:34

标签: ios objective-c

任何人都可以解释为什么我的刷新功能不起作用?我调用了UIRefresh控制器并且“pull to refresh”动画可以工作但是表视图不会重新加载XML数据。我究竟做错了什么?请帮忙。

#import "MasterViewController.h"

#import "DetailViewController.h"

@interface MasterViewController () {
  NSXMLParser *parser;
  NSMutableArray *feeds;
  NSMutableDictionary *item;
  NSMutableString *title;
  NSMutableString *link;
  NSString *element;
}
@end

@implementation MasterViewController

- (void)awakeFromNib {
  [super awakeFromNib];
}

// Paste Blog feed here
- (void)viewDidLoad {
  [super viewDidLoad];
  feeds = [[NSMutableArray alloc] init];
  NSURL *url = [NSURL URLWithString:@"http://www.placeholder.xml"];
  parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
  [parser setDelegate:self];
  [parser setShouldResolveExternalEntities:NO];
  [parser parse];
  UIRefreshControl *refreshControl = [UIRefreshControl new];
  [refreshControl addTarget:self
                     action:@selector(refresh:)
           forControlEvents:UIControlEventValueChanged];
  refreshControl.attributedTitle =
      [[NSAttributedString alloc] initWithString:@"Pull to refresh..."];
  self.refreshControl = refreshControl;
}

- (void)refresh:(UIRefreshControl *)sender {
  // ... your refresh code
  NSURL *url = [NSURL URLWithString:@"http://www.placeholder.xml"];
  NSURLRequest *request = [NSURLRequest requestWithURL:url];
  (void)[[NSURLConnection alloc] initWithRequest:request delegate:self];

  [sender endRefreshing];
}

- (void)didReceiveMemoryWarning {
  [super didReceiveMemoryWarning];
}

#pragma mark - Table View

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

- (NSInteger)tableView:(UITableView *)tableView
    numberOfRowsInSection:(NSInteger)section {
  return feeds.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  UITableViewCell *cell =
      [tableView dequeueReusableCellWithIdentifier:@"Cell"
                                      forIndexPath:indexPath];
  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)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
  if ([[segue identifier] isEqualToString:@"showDetail"]) {

    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    NSString *string = [feeds[indexPath.row] objectForKey:@"link"];
    [[segue destinationViewController] setUrl:string];
  }
}

@end

1 个答案:

答案 0 :(得分:0)

这里的答案中提出的想法应该有所帮助:stackoverflow.com/a/16347259/1151545

基本上创建你的UIRefreshControl,然后将它作为子视图添加到任何UIScrollView。仅供参考UITableView是UIScrollView的子类