В iOS 5 TableViewController не прокручивается и не вызывает didSelectRowAtIndexPath - PullRequest
1 голос
/ 10 февраля 2012

Я обновился до iOS 5 с версией XCode 4.2. Так как я обновился, я не могу создать правильный рабочий стол в виде контроллера.

1) Представление таблицы отображается на устройстве, но при попытке прокрутки вверх происходит сбой без сообщения об ошибке

2) когда я пытаюсь выбрать ячейку, didSelectRowAtIndexPath не вызывается.

NOTE: the same code was workign for me before upgrating to iOS5.

Это код для файла TableViewController.m

 #import "CTableViewController.h"
 @implementation CTableViewController

 @synthesize arrNames;

-(id)initWithStyle:(UITableViewStyle)style
 {
    self = [super initWithStyle:style];
    if (self) {
       NSLog(@"CTableViewController::initWithStyle");
     // Custom initialization
}
return self;
}

-(void)viewDidLoad
{
   [super viewDidLoad];

   arrNames = [[NSMutableArray alloc]initWithObjects:@"Peter Frank Brauer",@"Robert Schneider",@"Winfried Walter Kem",@"Eugen Germen Bachle",@"Clara Weib",@"Heinz Guther Winkler",@"Roland Bendel",@"Swen Aschemeyer",@"Patrick Bodingmeier",nil];
 }

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
 {
    // Return the number of sections.
 return 1;
 }

 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 {
     // Return the number of rows in the section.
    return [self.arrNames count];
 }

  -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
     static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

// Configure the cell...
cell.textLabel.text = [self.arrNames objectAtIndex:indexPath.row];
cell.textLabel.font = [UIFont systemFontOfSize:16];
NSLog(@"CTableViewController::cellForRowAtIndexPath");
return cell;
}

 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"called didSelectRow method");

}

@end

Спасибо, пожалуйста, помогите Suse

Ответы [ 4 ]

0 голосов
/ 08 августа 2012

Как выбрать строку, если сначала происходит сбой?

Кстати, код, похоже, не проблема. Попробуйте это после перезапуска Xcode:

  1. Перейти к органайзеру
  2. Выберите вкладку Проект
  3. Нажмите на ваш открытый проект и УДАЛИТЕ Производные данные.

Затем дождитесь переиндексации. (Вы можете увидеть верхний штрих код и код с новым целевым индексом).

Так же, как обычно, Clean All Target and Build.

У меня работает в подобных случаях. Надеюсь, это поможет.

0 голосов
/ 07 августа 2012

Я скопировал и вставил ваш исходный код в свежий проект. Несколько вещей выскочили на меня.

Вы создаете подкласс UITableViewController. Попробуйте просто создать подкласс UIViewController и удалите метод initWithStyle.

Убедитесь, что в кончике делегат табличного представления и источник данных оба прикреплены к Владельцу файла.

Если вы все еще испытываете сбои, то этот код НЕ является вашей проблемой.

0 голосов
/ 07 августа 2012

В моем случае это был экземпляр контроллера, объявленный локально, и он терял делегирование, поэтому я объявил экземпляр в заголовке, и все работает.

0 голосов
/ 07 августа 2012

Если происходит сбой без какого-либо сообщения об ошибке, вероятно, это проблема управления памятью, и это может произойти из-за какой-то другой части кода или даже из-за неправильно отформатированного nslog.

Компилятор, похоже, не замечает нескольких очевидных вещей, таких как установка значения дроби для int, которое мгновенно завершит работу приложения, но без какого-либо значимого сообщения об ошибке.

Старайтесь искать мирские вещи в своем коде, а не только в реализации tableView.

Кроме того, есть ли какая-либо конкретная причина, по которой вы заполняете ваши arrNames с помощью alloc, init (не-autorelease) вместо arrayWithObjects?

Также: Запустите статический анализатор! Это может помочь. Удерживайте кнопку «Run» нажатой, и появится кнопка «Анализ».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...