- [UIViewController tableView:numberOfRowsInSection:]:无法识别的选择器发送到实例0x7fc748e37ea0'

时间:2014-11-24 19:47:11

标签: ios objective-c uitableview uiviewcontroller

我正忙着制作一个从.plist中加载一堆名字的应用。我已将其设置为将.plist加载到UiTableView中。现在的问题是,每当我尝试打开包含表中包含名称的表的菜单时,我都会收到错误代码。

这是错误消息:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x7fc748e37ea0'

这是我的viewController.m

#import "ViewController.h"
#import "Stuff.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

Stuff *s = [[Stuff alloc] init];

[s getStuff];

self.items = [[NSMutableArray alloc] initWithArray:s.stuff];

}

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

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.items count];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:  (NSIndexPath*)indexPath
{
NSString *id = @"plistdata";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:id forIndexPath:indexPath];

if(cell == nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:id];
}

cell.textLabel.text = self.items[indexPath.row];

return cell;
}


@end

谢谢!

3 个答案:

答案 0 :(得分:4)

以Matt所说的为基础:你得到的错误说UIViewController类(所有视图控制器的基类)都不能识别消息tableView:numberOfRowsInSection:

不知何故,当您创建视图控制器时,您需要创建一个通用的UIViewController对象,而不是自定义ViewController类的实例。

原因取决于您创建视图控制器的方式。

如果使用调用-[UIViewController initWithNibName:bundle:]的代码创建它,您可能正在创建UIViewController的实例而不是自定义的ViewController类:

ViewController *myVC = [[UIViewController alloc] initWithNibName: @ViewController" 
  bundle: nil];

如果您使用情节提要板创建它,则可能错误地配置了故事板。

为了帮助您弄清楚为什么要获得通用的UIViewController而不是自定义类,您需要告诉我们您是如何创建自定义视图控制器的实例的。

答案 1 :(得分:1)

问题是您所显示的代码永远不会被调用,因为您显示的视图控制器(ViewController)不是表视图的数据源/委托。数据源/委托消息正被发送到某些其他视图控制器。 (这可能是因为故事板配置错误,但您没有提供足够的信息以确保这一点。)

答案 2 :(得分:0)

验证接口构建器中的File's Owner对象是否设置为您正在实现的UITableViewController子类的实例。还要确保tableView出口链接到表视图。

.h文件

@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDataSource>
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@end

故事板设置

属性检查员:

enter image description here

Connections Inspector:

enter image description here