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:はiOS6.0でのみ追加されました。

より良い使用dequeueReusableCellWithIdentifier:

于 2012-12-18T18:31:20.193 に答える
1

@Chase、アプリをiOS 5.1と互換性を持たせようとしたときに、今日も同じ問題が発生しました。

ボタンを機能させる方法は、Gesture Recognizerを利用し、実装する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チェックがある理由は、iOS6ではこれは問題ではないためです。書式が正しくないことをお詫びします。まだここに投稿するのは初めてです。

于 2012-12-26T18:40:09.133 に答える