当我描述tableView.datasource = self
时,
应用程序异常终止signal SIGABRT(unrecognized selector sent to instance)
当我删除tableView.datasource = self
时,
应用程序运行,但数据源方法(cellForRowInSection
等)未被反映。
要管理tableView
,我使用UIViewController
子类
视图由多个子视图组成,其中只有一个是tableView
。
ViewController.h
@interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>
ViewController.m
@interface ViewController ()
@property (retain, nonatomic) UITableView *tableView;
@end
@implementation ViewController{
@private NSArray *_data1;
@synthesize tableView = _tableView;
- (void)viewDidLoad
{
_tableView = [[UITableView alloc]initWithFrame:CGRectMake(-10, 70, 320, 480)];
_tableView.dataSource = self;
_tableView.delegate = self;
[self.view addSubview:_tableView];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [_data1 count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [_data1[section] count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
NSString *data;
data = _data1[indexPath.section][indexPath.row];
cell.textLabel.text = data;
return cell;
}
错误消息---------
-tableView:numberOfRowsInSection
时
return 1;
Assertion failure in -[UITableView dequeueReusableCellWithIdentifier:forIndexPath:], /SourceCache/UIKit_Sim/UIKit-2903.23/UITableView.m:5261
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to dequeue a cell with identifier Cell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard’
-tableView:numberOfRowsInSection
时
return [_data1[section]count]
[__NSCFConstantString count]: unrecognized selector sent to instance 0x100006930
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFConstantString count]: unrecognized selector sent to instance 0x100006930'
谢谢。
答案 0 :(得分:2)
看到此示例代码,我认为错误可能是_data1[section]
不是能够使用选择器count
的对象。
删除ligne _tableView.dataSource = self;
时,方法tableView:numberOfRowsInSection:
未被调用且您的应用不会崩溃。
答案 1 :(得分:0)
当您将视图控制器设置为表视图的数据源时,视图控制器必须符合UITableViewDataSource协议。
该协议中有2种必需的方法:
- tableView:cellForRowAtIndexPath:必需的方法 - tableView:numberOfRowsInSection:required method
还有许多可选方法,包括
- numberOfSectionsInTableView: - sectionIndexTitlesForTableView: - tableView:sectionForSectionIndexTitle:atIndex: - tableView:titleForHeaderInSection: - tableView:titleForFooterInSection:
如果您至少没有实施所需的2种方法,程序将崩溃。
正如其他人所要求的那样,您需要复制并粘贴您收到的确切错误消息。这将有助于我们了解出现了什么问题。