我正在尝试将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];
}
...
答案 0 :(得分: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];
答案 1 :(得分: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]];
答案 2 :(得分:0)
您的课程中是否有基本的委托和数据源方法?我看到你在.h文件中调用了它们,但你需要在.m文件中实际定义它们。
至少你需要包括......
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
答案 3 :(得分: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。