0

我继承了一些旧的 iOS 代码并尝试将其集成到新的 iOS 6 应用程序中。我已经实现了大部分代码,到目前为止一切正常。我现在正在处理旧代码的最后一点。我正在实现一组视图来为我的应用程序的新闻部分显示 rss。我已经实现了类别视图,它在选择一个项目时会显示该类别中的各个项目。但是什么都没有显示。我已经做了所有我知道我需要做的修改,但是我不是 iOS 开发方面的专家,需要一些指导。下面是模拟器尝试显示视图时的快照,下面是我的 .h 和 .m 文件的副本。我不知道是什么阻止了表格中的任何内容出现。

这是模拟器的快照

快照

这是故事板的快照,显示了到表视图的链接

快照2

这是.h文件

#import <UIKit/UIKit.h>
#import "BlogRssParser.h"

@class BlogRssParser;
@class BlogRssParserDelegate;
@class BlogRss;
@class XMLCategory;

@interface NewsViewController : UIViewController <UITableViewDataSource,UITableViewDelegate, BlogRssParserDelegate> {
    BlogRssParser * _rssParser;
    XMLCategory * _currItem;
}

@property (nonatomic, retain) BlogRssParser * rssParser;
@property (readwrite, retain) XMLCategory * currItem;

@property (nonatomic, retain) IBOutlet UITableView *itemTableView;

@end

这是我的 .m 文件

#import "NewsViewController.h"
#import "NewsDetailsViewController.h"
#import "BlogRssParser.h"
#import "BlogRss.h"
#import "XMLCategory.h"

#define kLabelTag 1;

@interface NewsViewController ()

@end

@implementation NewsViewController

@synthesize rssParser = _rssParser;
@synthesize currItem = _currItem;

- (void)navBarInit {
    UIBarButtonItem *refreshBarButton = [[UIBarButtonItem alloc]
                                         initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh
                                         target:self action:@selector(reloadRss)];

    [self.navigationItem setRightBarButtonItem:refreshBarButton animated:YES];
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.itemTableView.delegate = self;
    self.itemTableView.dataSource = self;

- (void) viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [self navBarInit];
    [self.itemTableView reloadData];
    self.itemTableView.userInteractionEnabled = NO;    
}

- (void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    _rssParser = [[BlogRssParser alloc]init];
    _rssParser.delegate = self;

    [[self rssParser]startProcess:[_currItem categoryId]];
}

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

-(void)reloadRss{
    [[self rssParser]startProcess:[_currItem categoryId]];
    [[self itemTableView]reloadData];
}

- (void)processCompleted{
    [[self itemTableView]reloadData];
//  _tableView.userInteractionEnabled = YES;
    [[self itemTableView]setUserInteractionEnabled:YES];
}

-(void)processHasErrors{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"My Title" message:@"Unable to retrieve the news. Please check if you are connected to the internet."
                                                   delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
    [alert show];
}

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return [[[self rssParser]rssItems]count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    const CGFloat LABEL_TITLE_HEIGHT = 70.0;
    const CGFloat LABEL_WIDTH = 210.0;

    NSString * mediaUrl = [[[[self rssParser]rssItems]objectAtIndex:indexPath.row]mediaUrl];
    NSData * imageData = [[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:mediaUrl]];
    UIImage * imageFromImageData;
    if (imageData == nil) {
        imageData = [[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:@"http://www.urlForImage.image.png"]];
    }
    imageFromImageData = [[UIImage alloc] initWithData:imageData];


    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"rssItemCell"];
    if(nil == cell){
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"rssItemCell"];

        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

        UILabel * _topLabel =
        [[UILabel alloc]
         initWithFrame:
         CGRectMake(
                    imageFromImageData.size.width + 10.0,
                    0.0,
                    LABEL_WIDTH,
                    LABEL_TITLE_HEIGHT)];


        _topLabel.tag = kLabelTag;
        _topLabel.opaque = NO;
        _topLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin;
        _topLabel.backgroundColor = [UIColor clearColor];
        _topLabel.textColor = [UIColor colorWithRed:0.25 green:0.0 blue:0.0 alpha:1.0];
        _topLabel.highlightedTextColor = [UIColor colorWithRed:1.0 green:1.0 blue:0.9 alpha:1.0];
        _topLabel.font = [UIFont systemFontOfSize:[UIFont labelFontSize]];
        _topLabel.numberOfLines = 0;
        [cell.contentView addSubview:_topLabel];
    }

    cell.imageView.image = imageFromImageData;

    UILabel * topLabel = (UILabel *)[cell.contentView viewWithTag:1];
    topLabel.text = [[[[self rssParser]rssItems]objectAtIndex:indexPath.row]title];
    return cell;
}

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

    NewsDetailsViewController *tlc = [[DetailsViewController alloc]init];
    tlc.currentItem = [[[self rssParser]rssItems]objectAtIndex:indexPath.row];
    tlc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

    [self presentViewController:tlc animated:YES completion:nil];
}

@end
4

3 回答 3

4

我无法就您面临的问题得出结论。

但这里有几件事你应该检查。

因为在你的截图中我什至看不到一个空的表格视图

  1. Nib 文件上有 TableView 吗?
  2. 它是从 Nib 文件映射到 IBOutlet itemTableView 吗?
于 2013-08-23T19:15:05.640 回答
0

我要做的第一件事是确保它[[[self rssParser] rssItems] count]实际上返回 > 0。另外,这是您的 .m 文件的复制和粘贴吗?viewDidLoad 缺少右括号,但 Xcode 会抓住它。

于 2013-08-23T19:18:51.420 回答
0

添加至少一个表格视图单元格(拖放一个原型单元格).. 像这样 在此处输入图像描述 在此处输入图像描述

然后选择该单元格并在“重用标识符”中给出一些名称,该标识符允许数据源..

于 2013-08-27T10:04:00.110 回答