tableView.datasource = self error:无法识别的选择器

时间:2014-02-26 15:20:06

标签: ios iphone objective-c uitableview

当我描述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:numberOfRowsInSectionreturn 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:numberOfRowsInSectionreturn [_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'

谢谢。

2 个答案:

答案 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种方法,程序将崩溃。

正如其他人所要求的那样,您需要复制并粘贴您收到的确切错误消息。这将有助于我们了解出现了什么问题。