UITableView выдает EXEC_BAD_ACCESS, когда пользователь пытается прокрутить, чтобы показать нижние строки - PullRequest
0 голосов
/ 08 сентября 2011

Мой UITableView отображается правильно без заминки.Тем не менее, он падает с EXEC_BAD_ACCESS всякий раз, когда пользователь пытается прокрутить вниз, чтобы показать нижние строки.Я уже пробовал комментировать каждый [someobject release], но безрезультатно.Я подозреваю, что виновником является cellForRowAtIndexPath метод.Вот код для всего моего контроллера:

 -(void)viewDidLoad {

    NSLog(@"myString is :%@", myString);
    int processID = [myString intValue];

    //NSLog(@"transferredArray is %@", transferredArray);
    task = [[NSTask alloc] init];
    [task setLaunchPath: @"/bin/ps"];

    arguments = [NSArray arrayWithObjects: @"aux", [NSString stringWithFormat:@"%i", processID],nil];

    [task setArguments: arguments];

    NSPipe *pipe;
    pipe = [NSPipe pipe];
    [task setStandardOutput:pipe];

    NSFileHandle *file;
    file = [pipe fileHandleForReading];

    [task launch];

    NSData *data;
    data = [file readDataToEndOfFile];

    NSString *string;
    string = [[NSString alloc] initWithData: data
                                   encoding: NSUTF8StringEncoding];

    NSLog(@"ps aux output :%@",string);


    NSArray *lines= [string componentsSeparatedByString:@"\n"];

    NSString *lastline = [lines objectAtIndex:[lines count]-2];
    //  NSLog(@"%@",lastline);



    lines2= [lastline componentsSeparatedByString:@" "];
    NSLog(@"%@",lines2);
    for (int i=0; i<[lines2 count]; i++) {

        if([[lines2 objectAtIndex:i] isEqualToString:@""]){
            [lines2 removeObjectAtIndex:i];
        }

    }


    for (int i=0; i<[lines2 count]; i++) {

        if([[lines2 objectAtIndex:i] isEqualToString:@""]){
            [lines2 removeObjectAtIndex:i];
        }

    }

    for (int i=0; i<[lines2 count]; i++) {

        if([[lines2 objectAtIndex:i] isEqualToString:@""""]){
            [lines2 removeObjectAtIndex:i];
        }

    }

    for (int i=0; i<[lines2 count]; i++) {

        if([[lines2 objectAtIndex:i] isEqualToString:@"0"]){
            [lines2 removeObjectAtIndex:i];
        }

    }

    for (int i=0; i<[lines2 count]; i++) {

        if([[lines2 objectAtIndex:i] isEqualToString:@"0.0"]){
            [lines2 removeObjectAtIndex:i];
        }

    }

    for (int i=0; i<[lines2 count]; i++) {

        if([[lines2 objectAtIndex:i] isEqualToString:@"??"]){
            [lines2 removeObjectAtIndex:i];
        }

    }

    for (int i=0; i<[lines2 count]; i++) {

        if([[lines2 objectAtIndex:i] isEqualToString:@"0:00.00"]){
            [lines2 removeObjectAtIndex:i];
        }

    }

    NSLog(@"lines2 after for loops is %@", lines2);









    NSLog(@"Lines 2 is%@",lines2);



    self.title = @"Process Info";

    label = [[NSMutableArray alloc]init];

    [label addObject:@"User:"];
    [label addObject:@"Process ID:"];
    [label addObject:@"CPU(%):"];
    [label addObject:@"MEM(%):"];
    [label addObject:@"Status:"];
    [label addObject:@"Time Started:"];
    [label addObject:@"Launch Path:"];
    [label addObject:@"STAT:"];
    [label addObject:@"Time Started:"];
    [label addObject:@"Time Elapsed:"];
    [label addObject:@"Launch Command:"];

    [super viewDidLoad];
}


/*
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}
 */


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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];   


    /*
    NSString *CellIdentifier = [NSString stringWithFromat:@"Cell_%d_%d",indexPath.section,indexPath.row];
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];   
    */
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]autorelease];
    }

    [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 
    NSString *cellValue = [label objectAtIndex:indexPath.row];
    cell.textLabel.text = cellValue;
    cell.textColor = [UIColor colorWithRed:154.0/255.0 green:14.0/255.0 blue:2.0/255.0 alpha:1];
    cell.font = [UIFont systemFontOfSize:16.0];


    UILabel *label2 =  [[[UILabel alloc] initWithFrame:CGRectMake(120.0, 0, 240.0, 
                                                                  tableView.rowHeight)]autorelease]; 




    label2.font = [UIFont systemFontOfSize:16.0]; 
    NSString *cellValue1 = [lines2 objectAtIndex:indexPath.row];
    label2.text = cellValue1;
    label2.textAlignment = UITextAlignmentLeft; 
    label2.textColor = [UIColor blackColor]; 
    label2.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | 
    UIViewAutoresizingFlexibleHeight; 
    [cell.contentView addSubview:label2]; 


    return cell;
}


-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [lines2 count];
}


- (void)dealloc 
{
    //[transferredArray release];
    //[myString release];
    //[arguments release];
    //[ResultStringID release];
    //[values release];
    //[label release];
    [super dealloc];
}

Любая помощь очень ценится!:)

1 Ответ

1 голос
/ 08 сентября 2011

я думаю, что это поможет:

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

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];   

UILabel *label2;
if (cell == nil) 
{
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]autorelease];
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 
    cell.textColor = [UIColor colorWithRed:154.0/255.0 green:14.0/255.0 blue:2.0/255.0 alpha:1];
    cell.font = [UIFont systemFontOfSize:16.0];

    label2 =  [[[UILabel alloc] initWithFrame:CGRectMake(120.0, 0, 240.0, 
                                                         tableView.rowHeight)]autorelease];

    label2.font = [UIFont systemFontOfSize:16.0]; 
    NSString *cellValue1 = [lines2 objectAtIndex:indexPath.row];
    label2.text = cellValue1;
    label2.textAlignment = UITextAlignmentLeft; 
    label2.textColor = [UIColor blackColor]; 
    label2.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | 
    UIViewAutoresizingFlexibleHeight; 
    [cell.contentView addSubview:label2]; 

}


NSString *cellValue = [label objectAtIndex:indexPath.row];
cell.textLabel.text = cellValue;

return cell;
}

, потому что ваша табличная ячейка является dequeueble, поэтому вы не должны инициализировать метку, если ячейка не нольизменять текст метки только при обновлении таблицы (или инициализировать все, если ячейка равна нулю)

...