0

我正在尝试将 UITableView 作为子视图添加到 UIViewController 的视图中,但出现错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Skema_Main___Controller setTableViewStyle:]: unrecognized selector sent to instance 0x9e41ce0'

这是我的代码:

Skema Main - Controller.h

@interface Skema_Main___Controller : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource, UITableViewDataSource, UITableViewDelegate> {

    UIPickerView *pickerView;
    NSMutableArray *pickerArray;

}

// property and setter
@property (nonatomic) NSInteger week;
- (void)setWeekSelected:(NSInteger) weekSelected;

//UIPicker
@property (nonatomic, retain) UIPickerView *pickerView;
@property (nonatomic, retain) NSMutableArray *pickerArray;

//TableView
@property (nonatomic, retain) UITableView *skemaTableView;

// Main Dictionary
@property (nonatomic,strong) NSMutableDictionary *dataDictionary; // data

@end

Skema Main - Controller.m

(我从这里删除了很多不相关的东西,我也在使用 UIPickerView)

...
@synthesize skemaTableView;
...

- (void)viewDidLoad
{
    [super viewDidLoad];


    // Set picker for week
    NSLog(@" %i", self.week);
    [self generateView:self.week];

    //TableView
    float screenWidth = [UIScreen mainScreen].bounds.size.width;
    skemaTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, screenWidth, 200) style:UITableViewStylePlain];
    skemaTableView.dataSource = self;
    skemaTableView.delegate = self;

    [self.view addSubview:skemaTableView];

}
...
4

4 回答 4

0

当您合成 skemaTableView 时,您会创建一个 getter 和一个 setter 函数,如下所示:

-(UITableView *) skemaTableView
{ 
   return skemaTableView;
}

-(void)setSkemaTableView:(UITableView*)newSkemaTableView
{
  if (newSkemaTableView!= skemaTableView)
  {
      skemaTableView = newSkemaTableView;
  }
}

因此,当您尝试在 viewDidLoad 方法中分配和初始化它时,您并没有调用生成的 setSkemaTableView 方法。当您编写此代码时:

[self setSkemaTableView:[[UITableView alloc] initWithFrame:CGRectMake(0, 0, screenWidth, 200) style:UITableViewStylePlain]];
[[self skemaTableView] setDataSource:self];
[[self skemaTableView] setDelegate:self];

代码调用生成的 setter 和 getter。

于 2013-08-21T14:38:45.727 回答
0

尝试skemaTableView作为属性而不是作为实例变量访问:

self.skemaTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, screenWidth, 200)
                                                   style:UITableViewStylePlain];
self.skemaTableView.dataSource = self;
self.skemaTableView.delegate = self;

[self.view addSubview:self.skemaTableView];
于 2013-08-21T14:21:58.510 回答
0

self设置表格视图时,您似乎没有引用。

[self setSkemaTableView:[[UITableView alloc] initWithFrame:CGRectMake(0, 0, screenWidth, 200) style:UITableViewStylePlain]];
[[self skemaTableView] setDataSource:self];
[[self skemaTableView] setDelegate:self];

[self.view addSubview:[self skemaTableView]];
于 2013-08-21T14:22:09.300 回答
0

你的类中有基本的委托和数据源方法吗?我看到您在 .h 文件中调用了它们,但您实际上需要在 .m 文件中定义它们。

至少你需要包括...

    -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

    -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    -(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
于 2013-08-21T14:30:18.507 回答