2013-01-20 35 views
0

我試圖使用MWFeedParser庫。我認爲問題是我想使用視圖控制器和表視圖來顯示新聞。現在,在啓動應用程序時,我的表格視圖中沒有任何內容。對於這個消息視圖控制器的代碼如下所示:實施MWFeedParser時出錯

.H:

#import "MWFeedItem.h" 
#import "MWFeedParser.h" 

@interface NewsViewController : UIViewController <MWFeedParserDelegate> { 
    IBOutlet UILabel *label; 
    // 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; 

@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 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    // Date 
    // Setup 
    self.title = @"News"; 
    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.website.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 

在IB,我拖着一個表視圖上的視圖和鏈接它到數據源和委託。但是在表格視圖中沒有任何顯示。 會真的很感謝一些答案/想法!

謝謝。

+0

在頭部您必須的UITableViewDelegate/UITableViewDataSource協議:@interface NewsViewController:的UIViewController {.. – TonyMkenu

+0

2)回到主要的故事板文件,並從桌面視圖中的「控制+拖動」到視圖控制器,並選擇「數據源」和「委託」。這就是你如何告訴tableview它將從哪裏獲取數據,以及是否有事件。檢查UIViewController中的UITableView http://kurrytran.blogspot.ro/2011/10/ios-5-storyboard-and.html – TonyMkenu

+0

我已經完成了所有這些,但我不做任何更改... – DavidG

回答

0

我想你應該去掉下面行的你 「updateTableWithParsedItems」 的方法:

[self.tableView reloadData]; 
+0

嗯,不做任何改變.. – DavidG