在子视图中使用UITableView时无法识别的选择器

时间:2010-08-30 18:47:52

标签: iphone uitableview

我正在构建一个使用TabBarController来显示其他几个视图的应用。在其中一个视图中,我使用导航控制器来导航某些表格数据。当用户单击此选项卡时,我加载了NavigationController,后者又加载了我正在使用的TableView。问题是我在加载TableView控制器时出现以下错误:

-[UIViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x6b37b10

我到处都读到这种类型的错误通常来自IB中的错误连接或者视图控制器中的类不正确。这是我的IB代码和截图,以帮助我为我调试。

提前致谢!

我收到的错误

alt text TableView在IB中的连接

alt text 文件所有者的类 alt text 我的界面文件

@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];
}

2 个答案:

答案 0 :(得分:1)

首先,这是一个构造良好的问题,我希望每个人都发布屏幕截图和完整的源代码。 : - )

看起来消息正在发送到通用的UIViewController,而不是FAQListViewController。这告诉我,当您实例化FAQListViewController时,您正在创建UIViewController的实例?

要实例化FAQ列表,您应该使用以下内容:

[[FAQListViewController alloc] initWithNibName: @"FAQViewController" bundle: nil];

如果您将其实例化为:

,则可能会出现错误

[[UIViewController alloc] initWithNibName: @"FAQViewController" bundle: nil];

答案 1 :(得分:0)

尝试制作代表&amp;以编程方式连接数据源。我有一个类似的问题是UITableViewDelegate协议的可选方法没有明显的原因被调用(而其他委托方法按预期工作),除非我以编程方式建立连接。由于该方法是可选的,因此没有抛出任何异常。