2013-01-22 52 views
0

我想在我的應用程序中使用MWFeedParser庫。在我的主屏幕上,我有一個名爲NewsViewController的視圖控制器。 在MWFeedParser庫中,根視圖控制器被稱爲RootViewController。我試圖將RootViewController中的所有代碼複製到NewsViewController .H + .M和IB中,我已將tableview鏈接到「dataSource」和「delegate」。但是當我的應用程序啓動時,tableview是空的。 下面是代碼的樣子:在ViewController中實現MWFeedParser

.H:

#import <UIKit/UIKit.h> 
#import "MWFeedItem.h" 
#import "MWFeedParser.h" 

@interface NewsViewController : UITableViewController <MWFeedParserDelegate, UITableViewDelegate, UITableViewDataSource> { 

    // Parsing 
    MWFeedParser *feedParser; 
    NSMutableArray *parsedItems; 

    // Displaying 
    NSArray *itemsToDisplay; 
    NSDateFormatter *formatter; 
    IBOutlet UITableView *tableView; 
} 

// Properties 
@property (nonatomic, retain) NSArray *itemsToDisplay; 
@property (nonatomic, retain) IBOutlet UITableView *tableView; 
-(IBAction)goHome; 

@end 

.M:

#import "NSString+HTML.h" 
#import "MWFeedParser.h" 
#import "DetailTableViewController.h" 

@implementation NewsViewController 

@synthesize itemsToDisplay, tableView; 


#pragma mark - 
#pragma mark View lifecycle 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     self.title = NSLocalizedString(@"News", @"News"); 
     self.tabBarItem.image = [UIImage imageNamed:@"icon_news"]; } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    label.shadowOffset = CGSizeMake(0.0f, 1.0f); 
    label.textColor = [UIColor colorWithRed:0xB3/249.0 green:0xB3/252.0 blue:0xB3/253.0 alpha:1]; 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    // Date 
    // Setup 
    formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateStyle:NSDateFormatterShortStyle]; 
    [formatter setTimeStyle:NSDateFormatterShortStyle]; 
    parsedItems = [[NSMutableArray alloc] init]; 
    self.itemsToDisplay = [NSArray array]; 

    // Refresh button 
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh 
                          target:self 
                          action:@selector(refresh)]; 
    // Parse 
    NSURL *feedURL = [NSURL URLWithString:@"http://www.mywebsite.com/feed/"]; 
    feedParser = [[MWFeedParser alloc] initWithFeedURL:feedURL]; 
    feedParser.delegate = self; 
    feedParser.feedParseType = ParseTypeFull; // Parse feed info and all items 
    feedParser.connectionType = ConnectionTypeAsynchronously; 
    [feedParser parse]; 

    UIImage *someImage = [UIImage imageNamed:@"[email protected]"]; 
    [button setBackgroundImage:someImage forState:UIControlStateHighlighted]; 

} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (void)viewDidAppear:(BOOL)animated { 
    static BOOL first = YES; 
    if (first) { 
     UIViewController *popup = [[Home1ViewController alloc] initWithNibName:@"Home1ViewController" bundle:nil]; 

     [self presentViewController:popup animated:NO completion:nil]; 
     first = NO; 
    } 
} 

#pragma mark - 
#pragma mark Parsing 

// Reset and reparse 
- (void)refresh { 
    self.title = @"Refreshing..."; 
    [parsedItems removeAllObjects]; 
    [feedParser stopParsing]; 
    [feedParser parse]; 
    self.tableView.userInteractionEnabled = NO; 
    self.tableView.alpha = 0.3; 
} 

- (void)updateTableWithParsedItems { 
    self.itemsToDisplay = [parsedItems sortedArrayUsingDescriptors: 
          [NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:@"date" 
                       ascending:NO]]]; 
    self.tableView.userInteractionEnabled = YES; 
    self.tableView.alpha = 1; 
    [self.tableView reloadData]; 
} 

#pragma mark - 
#pragma mark MWFeedParserDelegate 

- (void)feedParserDidStart:(MWFeedParser *)parser { 
    NSLog(@"Started Parsing: %@", parser.url); 
} 

- (void)feedParser:(MWFeedParser *)parser didParseFeedInfo:(MWFeedInfo *)info { 
    NSLog(@"Parsed Feed Info: 「%@」", info.title); 
    self.title = info.title; 
} 

- (void)feedParser:(MWFeedParser *)parser didParseFeedItem:(MWFeedItem *)item { 
    NSLog(@"Parsed Feed Item: 「%@」", item.title); 
    if (item) [parsedItems addObject:item]; 
} 

- (void)feedParserDidFinish:(MWFeedParser *)parser { 
    NSLog(@"Finished Parsing%@", (parser.stopped ? @" (Stopped)" : @"")); 
    [self updateTableWithParsedItems]; 
} 

- (void)feedParser:(MWFeedParser *)parser didFailWithError:(NSError *)error { 
    NSLog(@"Finished Parsing With Error: %@", error); 
    if (parsedItems.count == 0) { 
     self.title = @"Failed"; // Show failed message in title 
    } else { 
     // Failed but some items parsed, so show and inform of error 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Parsing Incomplete" 
                 message:@"There was an error during the parsing of this feed. Not all of the feed items could parsed." 
                 delegate:nil 
               cancelButtonTitle:@"Dismiss" 
               otherButtonTitles:nil]; 
     [alert show]; 
    } 
    [self updateTableWithParsedItems]; 
} 

#pragma mark - 
#pragma mark Table view data source 

// Customize the number of sections in the table view. 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 

// Customize the number of rows in the table view. 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return itemsToDisplay.count; 
} 

// Customize the appearance of table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 
     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
    } 

    // Configure the cell. 
    MWFeedItem *item = [itemsToDisplay objectAtIndex:indexPath.row]; 
    if (item) { 

     // Process 
     NSString *itemTitle = item.title ? [item.title stringByConvertingHTMLToPlainText] : @"[No Title]"; 
     NSString *itemSummary = item.summary ? [item.summary stringByConvertingHTMLToPlainText] : @"[No Summary]"; 

     // Set 
     cell.textLabel.font = [UIFont boldSystemFontOfSize:15]; 
     cell.textLabel.text = itemTitle; 
     NSMutableString *subtitle = [NSMutableString string]; 
     if (item.date) [subtitle appendFormat:@"%@: ", [formatter stringFromDate:item.date]]; 
     [subtitle appendString:itemSummary]; 
     cell.detailTextLabel.text = subtitle; 

    } 
    return cell; 
} 

#pragma mark - 
#pragma mark Table view delegate 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    // Show detail 
    DetailTableViewController *detail = [[DetailTableViewController alloc] initWithStyle:UITableViewStyleGrouped]; 
    detail.item = (MWFeedItem *)[itemsToDisplay objectAtIndex:indexPath.row]; 
    [self.navigationController pushViewController:detail animated:YES]; 

    // Deselect 
    [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; 

} 

@end 

回答

0

你要做的就是在feedparserDidFinish方法,嘗試重新加載表....像下面...

 - (void)feedParserDidFinish:(MWFeedParser *)parser { 
     NSLog(@"Finished Parsing%@", (parser.stopped ? @" (Stopped)" : @"")); 
     [self.tableView reloadData]; 
    } 

讓我知道它工作與否!!!!!

快樂編碼!!!!!!!

相關問題