我正在构建一个使用TabBarController来显示其他几个视图的应用。在其中一个视图中,我使用导航控制器来导航某些表格数据。当用户单击此选项卡时,我加载了NavigationController,后者又加载了我正在使用的TableView。问题是我在加载TableView控制器时出现以下错误:
-[UIViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x6b37b10
我到处都读到这种类型的错误通常来自IB中的错误连接或者视图控制器中的类不正确。这是我的IB代码和截图,以帮助我为我调试。
提前致谢!
我收到的错误
TableView在IB中的连接
文件所有者的类 我的界面文件
@interface FAQListViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> {
// Dictionary that will hold the FAQ Key/Values
NSMutableArray *arrFAQData;
}
实施
@implementation FAQListViewController
// Implementation for UITableView numberOfRowsInSection protocol
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [arrFAQData count];
}
// Implementation for UITableView cellForRowAtIndexPath protocol
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// See if we have any cells available for reuse
UITableViewCell *objCell = [tableView dequeueReusableCellWithIdentifier:@"FAQCell"];
if (objCell == nil) {
// No reusable cell exists, so let's create a new one
objCell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: @"FAQCell"];
}
// Give it data
NSDictionary *objRow = [arrFAQData objectAtIndex: [indexPath row]];
objCell.textLabel.text = [objRow valueForKey:@"Title"];
// Return the created cell
return objCell;
}
// Selection Event Handler
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// Get the value for the selected key
NSDictionary *dictRow = [arrFAQData objectAtIndex:[indexPath row]];
NSString *strURL = [dictRow valueForKey: @"URL"];
// Alert result
UIAlertView *objAlert;
objAlert = [[UIAlertView alloc] initWithTitle:@"Alert" message: strURL delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
// Release created objects
[objAlert show];
[objAlert release];
// Deselect row
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
- (void)viewDidLoad {
// Pull in FAQ from Plist
NSString *strFAQPlist = [[NSBundle mainBundle] pathForResource:@"FAQData" ofType:@"plist"];
arrFAQData = [[NSMutableArray alloc] initWithContentsOfFile: strFAQPlist];
[super viewDidLoad];
}
- (void)dealloc {
[arrFAQData release];
[super dealloc];
}
答案 0 :(得分:1)
首先,这是一个构造良好的问题,我希望每个人都发布屏幕截图和完整的源代码。 : - )
看起来消息正在发送到通用的UIViewController,而不是FAQListViewController。这告诉我,当您实例化FAQListViewController时,您正在创建UIViewController的实例?
要实例化FAQ列表,您应该使用以下内容:
[[FAQListViewController alloc] initWithNibName: @"FAQViewController" bundle: nil];
如果您将其实例化为:
,则可能会出现错误 [[UIViewController alloc] initWithNibName: @"FAQViewController" bundle: nil];
答案 1 :(得分:0)
尝试制作代表&amp;以编程方式连接数据源。我有一个类似的问题是UITableViewDelegate协议的可选方法没有明显的原因被调用(而其他委托方法按预期工作),除非我以编程方式建立连接。由于该方法是可选的,因此没有抛出任何异常。