在cellForRowAtIndexPath目标c处为单元格null

时间:2015-06-30 11:39:01

标签: ios objective-c tableview

我有一个应用程序,我使用tableView,但行的实例在cellForRowAtIndexPath为nil。

这是我的代码:

这是TableViewController.h

#import <UIKit/UIKit.h>

@interface TableViewController : UITableViewController <UITableViewDataSource, UITableViewDelegate>
@property (strong, nonatomic) IBOutlet UITableView *tableView;

@end

这是TableViewController.m

#import "TableViewController.h"
#import "ProgramCell.h"

@implementation TableViewController
{
    NSArray *arrayDays;
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Initialize table data
    for(int i=0;i<10;i++){

    }
    arrayDays = [NSArray arrayWithObjects:@"Egg Benedict", @"Mushroom Risotto", @"Full Breakfast", @"Hamburger", @"Ham and Egg Sandwich", @"Creme Brelee", @"White Chocolate Donut", @"Starbucks Coffee", @"Vegetable Curry", @"Instant Noodle with Egg", @"Noodle with BBQ Pork", @"Japanese Noodle with Pork", @"Green Tea", @"Thai Shrimp Cake", @"Angry Birds Cake", @"Ham and Cheese Panini", nil];
}

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

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"CustomCell";

    ProgramCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    NSLog(@"description = %@",[cell description]);

    if (cell == nil) {
        cell = [[ProgramCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }
    cell.durationLabelCell.text = @"HOLA";


    return cell;
}
@end

这是我的CustomHell.h

#import <UIKit/UIKit.h>

@interface ProgramCell : UITableViewCell

@property (weak, nonatomic) IBOutlet UILabel *dateLabel;
@property (weak, nonatomic) IBOutlet UILabel *durationLabelCell;
@property (weak, nonatomic) IBOutlet UITextView *textViewCell;
@property (weak, nonatomic) IBOutlet UILabel *presenterLabelCell;


@end

这是我的CustomCell.m

#import "ProgramCell.h"

@implementation ProgramCell


- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{

    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];

    return self;
}


-(void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];
}

@end

我不知道我做错了什么,如果有人可以帮助我会很棒!谢谢

3 个答案:

答案 0 :(得分:0)

您应该将标识符设置为TableViewCell定义的一部分。

enter image description here

答案 1 :(得分:0)

您检查的方式&#34;单元格为空&#34;是不正确的。 \makeatletter \def\rbracket#1#2{\y@iv#2\internote \advance\y@iv\tw@\internote \inhgetn@i#1\relax\pl@base \advance\y@i-1\h@lf\internote \raise\y@i\rlap{\uplap{\offinterlineskip\hbox{\roffset{1.5}{\mxsps\@xxvii}}% \hbox{\roffset2{\vrule\@height\y@iv}}\hbox{\roffset{1.5}{\mxsps\@xxvii}}}}} \makeatother 只返回一个可重复使用的表格视图单元格对象,如果找不到它,它将返回nil,然后是什么

-dequeueReusableCellWithIdentifier

的确是创建一个带有标识符的新单元格(以后可以使用它)。

通过打印日志检查单元格是否为空的正确方法应为

if (cell == nil) {
  cell = [[ProgramCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}

答案 2 :(得分:0)

Not very sure if this is related, but why do you have a reference to a table view(i.e a separate Table View variable) in a table view controller. UITableViewController implicitly provides you one instance of a UITableView. Also try registering the cellType within the table view controllers if a prototype/dynamic class