iPhone SDK:为什么didSelectRowAtIndexPath不被解雇?

问题描述:

我有一张桌子上的视图。当应用程序启动时,它会加载前5个可见单元。这按预期工作。iPhone SDK:为什么didSelectRowAtIndexPath不被解雇?

我的问题是,当我尝试在表格中向下滚动时,应用程序崩溃并出现此错误。

我发现的是didSelectRowAtIndexPath没有被调用。 AFAIK,我需要做的就是订阅代表。但我必须错过什么?

@interface LandingRetailersViewController : TableSectionHeaderViewController<UITableViewDataSource, UITableViewDelegate, UITabBarDelegate> { 

任何帮助表示赞赏。

2010-06-06 12:25:42.547 的iPhoneOS [18238:207] * - [NSCFString 的tableView:的cellForRowAtIndexPath:]: 无法识别的选择发送到实例 0x451a980 2010-06-06 12: 25:42.549 的iPhoneOS [18238:207] *终止 应用由于未捕获的异常 'NSInvalidArgumentException' 的,原因: '*** - [NSCFString 的tableView:的cellForRowAtIndexPath:]: 无法识别的选择发送到实例 0x451a980'

这是我的代码来加载单元格。

UITableViewCell * cell = nil; 
NSInteger index = [indexPath indexAtPosition:1]; 

NSLog(@"WHAT IS INDEX %i", indexPath); 


RoundedGradientTableViewCell *retailerCell = (RoundedGradientTableViewCell *)[tb dequeueReusableCellWithIdentifier:@"RET"]; 
if(!retailerCell){ 
    retailerCell = [[[RoundedGradientTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"RET"] autorelease]; 
} 

[retailerCell setArcSize:5.0]; 
[retailerCell setStrokeSize:1.0]; 
[retailerCell setStrokeColor:[UIColor clearColor]]; 
[retailerCell setBackgroundFillColor:[UIColor clearColor]]; 
[retailerCell setBackgroundColor:[UIColor clearColor]]; 

Retailer *retailer = [self retailerAtIndex:index]; 
if(retailer){ 
    [[retailerCell textLabel] setText:[retailer name]]; 
    if([retailer hasImage]){ 
     [[retailerCell contentImageView] setImage:[retailer image]]; 
    } 
} else { 
    [[retailerCell textLabel] setText:@"No title"]; 
} 
cell = retailerCell; 
[cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 



NSLog(@"retailer: %@ ", [retailer name]); 
NSLog(@"log: %i ", index); 

return cell; 

所以,如果这是你的接口声明:

@interface LandingRetailersViewController : 
TableSectionHeaderViewController <UITableViewDataSource, 
UITableViewDelegate, UITabBarDelegate> 

你都可以从下面这行代码抛出一个异常:

-[NSCFString tableView:cellForRowAtIndexPath:] 

事情的事实是,你的tableView的dataSource属性被设置为一个字符串对象。您不能将cellForRowAtIndexPath消息发送到字符串对象。我的第一个问题是,什么是TableSectionHeaderViewController?这就是你的对象继承的东西,但那不是我熟悉的东西。一般来说,我会建议将来提供更多的代码。

无论如何,底线是你的tableView的dataSource属性被设置为一个字符串对象。查看设置的位置以及设置的对象。如果你提供更多的代码,我可以提供更多的帮助,但是我认为你可以从这里获得。 :)