UITableView方法没有触发

时间:2013-03-21 13:14:15

标签: ios objective-c cocoa-touch

我有一个带有UITableView控件的简单表视图控制器。我在头文件中实现了UITableViewDelegate和UITableViewDatasource。我已将数据源和委托分配为包含UITableView的ViewController。但是,没有任何表视图方法正在触发。我发布了精简的源代码和显示委托/数据源的屏幕截图。可能导致事件没有接通的可能原因是什么?

(仪表是包含值对象的NSArray的模型)

标题

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

@interface SitePickerViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>

@property (nonatomic,strong) GaugeList *gauges;

@end

实施

#import "SitePickerViewController.h"

@interface SitePickerViewController ()

@end

@implementation SitePickerViewController
@synthesize gauges;

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

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    NSInteger rowCount = [gauges.gaugeList count];
    NSLog(@"numberOfRowsInSection called: %i\n", rowCount);
    return rowCount;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    NSLog(@"cellForRowAtIndexPath\n");
    UITableViewCell *cell = [[UITableViewCell alloc] init];
    return cell;
}

-(void)loadView{
    gauges = [[GaugeList alloc] initWithStateIdentifier:@"WV" andType:nil];
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view.
    NSLog(@"viewDidLoad called: %i\n", [gauges.gaugeList count]);
}

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

@end

3 个答案:

答案 0 :(得分:0)

在viewDidLoad

设置

tableView.delegate = self;

如果您不使用XIB,还可以分配tableView。或者,如果您使用xib将代理和数据源映射到文件所有者

答案 1 :(得分:0)

使SitePickerViewController成为委托和数据源还不够。您还必须将该类设置为数据源和委托。确保也要连接到IBOutlet。

@interface <UITableViewDataSource, UITableViewDelegate>
@property (weak, nonatomic) IBOutlet UITableView *functionTableView;
@end

@implementation
- (void)viewDidLoad
{
    [super viewDidLoad];

    self.functionTableView.delegate = self;
    self.functionTableView.dataSource = self;
}

//Delegate and datasource methods down here
@end

答案 2 :(得分:0)

问题在于您loadView的实施。 loadView的任何实现都必须实际为控制器创建主视图并将其分配给self.view。如您所知,最终没有为视图控制器创建视图。

将您拥有的方法调用移至viewDidLoad

- (void)viewDidLoad {
    [super viewDidLoad];

    gauges = [[GaugeList alloc] initWithStateIdentifier:@"WV" andType:nil];

    // Do any additional setup after loading the view.
    NSLog(@"viewDidLoad called: %i\n", [gauges.gaugeList count]);
}