2013-09-02 3 views
0

Я пытаюсь использовать библиотеку MWFeedParser в своем приложении. На моем рабочем столе у ​​меня есть контроллер вида NewsViewController. В библиотеке MWFeedParser контроллер корневого представления называется RootViewController. Я попытался скопировать весь код из RootViewController в NewsViewController .H + .M, а в IB я связал табличное представление с «dataSource» и «делегировать». Но когда мое приложение запускает tableview, оно пустое. Вот как выглядит код:Как реализовать MWFeedParser в моем проекте

.Н:

#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 

.М:

#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

ли вы начать поиск неисправностей путем размещения точек останова в любом месте? – mattyohe

+0

Как вы это понимаете? Я только что начал программу, а это значит, что я не так хорошо знаком с этим ... Извините. @mattyohe – tracifycray

+0

Контрольные точки позволяют остановить выполнение во время выполнения, чтобы вы могли проверить состояние приложения. Вот документы яблока: https://developer.apple.com/library/ios/recipes/xcode_help-source_editor/Creating,Disabling, andDeletingBreakpoints/Creating,Disabling, andDeletingBreakpoints.html – mattyohe

ответ

0

вы можете следовать следующей ссылке, чтобы использовать MWFeedParser: https://0club1.blogspot.in/

Если Табличное пуст, вы могли бы получить следующую ошибку:

NSURLSession/NSURLConnection HTTP загрузка не удалась

Чтобы разрешить HTTP, мы должны разрешить произвольные загрузки в настройках безопасности при работе с портами. Выберите info.plist в своем проекте, в списке свойств информации добавьте новый список в качестве параметров безопасности для транспорта приложений. Внутри этого параметра добавьте Allow Arbitary Loads и отметьте его как YES.

enter image description here enter image description here

enter image description here

enter image description here