0

我有一个在 iOS6.1 上运行良好的应用程序。今天我意识到我可能应该尝试让它与 iOS5 兼容。我尝试在 iOS 5 模拟器上运行它,并在我的 dequeCell 方法调用中抛出异常。我不知道为什么它在 iOS6 上运行良好。还有其他人遇到这个问题吗?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = //throws exception here
     [tableView dequeueReusableCellWithIdentifier:CellIdentifier 
                                     forIndexPath:indexPath];
    cell.accessoryView = nil;
    cell.backgroundColor = [UIColor colorWithRed:.97 
                                           green:.97 
                                            blue:.97 
                                           alpha:1];
    cell.textLabel.textColor = [UIColor blackColor];
    cell.textLabel.backgroundColor = [UIColor clearColor];
    cell.selectionStyle = UITableViewCellSelectionStyleBlue;
    ...
    return cell;
}

-[UITableView dequeueReusableCellWithIdentifier:forIndexPath:]: unrecognized 
 selector sent to instance 0x8a3a000 -*** Terminating app due to uncaught 
 exception 'NSInvalidArgumentException', reason: '-[UITableView 
 dequeueReusableCellWithIdentifier:forIndexPath:]: unrecognized selector 
 sent to instance 0x8a3a000'
4

2 回答 2

7

据我所知,该方法dequeueReusableCellWithIdentifier:forIndexPath:仅在 iOS 6.0 中添加。

更好的使用dequeueReusableCellWithIdentifier:

于 2012-12-18T18:31:20.193 回答
1

@Chase,我今天在尝试使我的应用程序与 iOS 5.1 兼容时也遇到了同样的问题。

我让按钮工作的一种方法是使用手势识别器,并在您实现的 tapDetected 委托方法中,查询您想要的按钮并直接在代码中调用它。
在您的 ViewDidLoad 中注册识别器

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapDetected:)];
tapRecognizer.numberOfTapsRequired = 1;
tapRecognizer.delegate = self;
[self.view addGestureRecognizer:tapRecognizer];


    - (void)tapDetected:(UIGestureRecognizer*)tap{
NSArray *versionCompatibility = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ( 6 == [[versionCompatibility objectAtIndex:0] intValue] ) {
    [self.view endEditing:YES];
} else {
    if (CGRectContainsPoint(self.createSessionButton.frame, [tap locationInView:self.view])) {
        [self.view endEditing:YES];
        [self createNewSession:nil];
    }
   }

}

存在 iOS 检查的原因是因为在 ios 6 中这不是问题。抱歉格式错误,在这里发布仍然是新的。

于 2012-12-26T18:40:09.133 回答