2014-02-08 4 views
-2

Может ли кто-нибудь объяснить, почему моя попытка обновления не работает? Я вызвал контроллер UIRefresh, и анимация «pull to refresh» работает, но представление таблицы не перезагружает данные XML. Что я делаю не так? Пожалуйста помоги.Почему мой контроллер обновления iOS не работает?

#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

Необходимо определить «не работает». Что не работает? – Undo

+0

у вас добавить его в представление? Является ли ur view controller подклассом UITableViewController? – TMacGyver

ответ

0

Идея представлена ​​в ответ здесь должен помочь: stackoverflow.com/a/16347259/1151545

В основном создать ур UIRefreshControl затем добавить его как подвид к любому UIScrollView. FYI UITableView является подклассом UIScrollView

Смежные вопросы