Приложение падает, как только UITableView перезагружается - PullRequest
0 голосов
/ 10 января 2011

Я разрабатываю приложение, в котором TableView необходимо перезагрузить, как только завершится процесс входа в систему. Приложение вылетает с ошибкой EXC_BAD_ACCESS при перезагрузке данных таблицы. Он не падает, когда я удаляю все экземпляры дел, кроме case 0:

В чем может быть причина этого?

Вот код:

- (void)viewDidLoad {
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(loginDone:) 
                                                     name:@"loginDone" object:nil];
    statTableView.backgroundColor = [UIColor clearColor];
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)
section  {

return 6;
}

- (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.

    switch (indexPath.row) {

        case 0 :

            cell.textLabel.text = @"Foo:";
            NSLog(@"%@", data7);
            UILabel *myLabel2 = [[UILabel alloc] initWithFrame:CGRectMake(200, 10, 20, 30)];
            myLabel2.text = (@"%@", data7);
            myLabel2.textColor = [UIColor blackColor];
            myLabel2.backgroundColor = [UIColor whiteColor];
            myLabel2.font = [UIFont fontWithName:@"Trebuchet MS" size:14];
            [cell.contentView addSubview:myLabel2];
            break;

        case 1: 

            cell.textLabel.text = @"Foo: ";

            UILabel *myLabel4 = [[UILabel alloc] initWithFrame:CGRectMake(200, 10, 20, 30)];
            myLabel4.text = (@"%@", data11);
            myLabel4.textColor = [UIColor blackColor];
            myLabel4.backgroundColor = [UIColor whiteColor];
            myLabel4.font = [UIFont fontWithName:@"Trebuchet MS" size:14];
            [cell.contentView addSubview:myLabel4];
            break;

        case 2:

            cell.textLabel.text = @"Foo: ";

            UILabel *myLabel8 = [[UILabel alloc] initWithFrame:CGRectMake(200, 10, 20, 30)];
            myLabel8.text = (@"%@", data3);
            myLabel8.textColor = [UIColor blackColor];
            myLabel8.backgroundColor = [UIColor whiteColor];
            myLabel8.font = [UIFont fontWithName:@"Trebuchet MS" size:14];
            [cell.contentView addSubview:myLabel8];
            break;

        case 3:

            cell.textLabel.text = @"Foo: ";


            UILabel *myLabel10 = [[UILabel alloc] initWithFrame:CGRectMake(200, 10, 20, 30)];
            myLabel10.text = [NSString stringWithFormat:@"%@", data4];

            if ([data4 isEqualToString:@"0"]) {
                myLabel10.text = @"None";
            }   

            myLabel10.textColor = [UIColor blackColor];
            myLabel10.backgroundColor = [UIColor whiteColor];
            myLabel10.font = [UIFont fontWithName:@"Trebuchet MS" size:14];
            [cell.contentView addSubview:myLabel10];
            break;

        case 4:

            cell.textLabel.text = @"Foo: ";


            UILabel *myLabel12 = [[UILabel alloc] initWithFrame:CGRectMake(200, 10, 20, 30)];
            myLabel12.text = [NSString stringWithFormat:@"%@", data5];
            myLabel12.textColor = [UIColor blackColor];
            if ([data5 isEqualToString:@"Foo"]) {
                myLabel12.textColor = [UIColor redColor];
                myLabel12.text = @"Nil";
            } 
            myLabel12.backgroundColor = [UIColor whiteColor];
            myLabel12.font = [UIFont fontWithName:@"Trebuchet MS" size:14];
            [cell.contentView addSubview:myLabel12];
            break;

        case 5:

            cell.textLabel.text = @"Foo: ";


            UILabel *myLabel14 = [[UILabel alloc] initWithFrame:CGRectMake(200, 10, 50, 30)];
            if ([data6 isEqualToString:@"Foo"]) {
                myLabel14.textColor = [UIColor colorWithRed:(0/255.f) green:(100/255.f) blue:(0/255.f) alpha:1.0];
                myLabel14.text = @"No Dues";
            } else {
                myLabel14.text = [NSString stringWithFormat:@"%@", data6];
                myLabel14.textColor = [UIColor redColor];
            }
            myLabel14.backgroundColor = [UIColor whiteColor];
            myLabel14.font = [UIFont fontWithName:@"Trebuchet MS" size:14];
            [cell.contentView addSubview:myLabel14];
            break;

            /*
             [myLabel2 release];
             [myLabel4 release];
             [myLabel8 release];
             [myLabel10 release];
             [myLabel12 release];
             [myLabel14 release];
                    */
    }

    return cell;    
}

Ответы [ 3 ]

2 голосов
/ 10 января 2011

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

0 голосов
/ 10 января 2011

У ваших кодов есть проблемы.

Во-первых, для следующего метода требуется объект UITableViewCell с автоматическим выпуском.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

Во-вторых, ячейка может происходить из [tableView dequeueReusableCellWithIdentifier: CellIdentifier] , она уже имеет добавленную вами пользовательскую метку. И вы добавите больше пользовательских ярлыков в эту ячейку. Вы можете создать подкласс такого типа и получить желаемую UILabel по свойству.

0 голосов
/ 10 января 2011

Что такое переменные dataX?Если они освобождаются и им не присвоено значение nil, вы будете вызывать методы для освобожденных объектов, что вызовет EXC_BAD_ACCESS.

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