开发者

“EXC_BAD_ACCESS”, “-[CFString release]: message sent to deallocated instance” when scrolling in a table

am getting the following error while scrolling the UITableview. EXC_BAD_ACCESS, -[CFString retain]: message sent to deallocated instance

how can i find the deallocated instance...? this my noOfRowsinsection code

for(int i=0;i<size;i++)
{
    NSString *CellIdentifier1;
    if(universalApp==2)
    {
        NSAutoreleasePool *pool=[[NSAutoreleasePool alloc]init];
    CellIdentifier1 = @"CustomThumbImageTableCell_iphone";
    cell = [[[CustomThumbImageTableCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier1] autorelease];

        //NSLog(@">>>>> Creating image >>>>>>>>");
    //cell.thumbImageView = [[CustomImageView alloc] initWithFrame:CGRectMake(4, 4, 83, 101)];
    cell.thumbImageView = [[[CustomImageView alloc] initWithFrame:CGRectMake(4, 4, 83, 101)] autorelease];

    [imgViewArray addObject:cell.thumbImageView];

    [cell.thumbImageView release];  
        [pool release];

    }

and this my cellforRow code

enter code hereif(universalApp==2)
{
    NSLog(@"iphone cell>>>>>>>>>>>>>>>>>>>>>>");

    CustomThumbImageTableCell *cell = nil;


    @try
    {
        static NSString *CellIdentifier = @"CustomThumbImageTableCell_iphone";
        int currentRow = [indexPath row] ;//+ skippedItems;
        //NSLog(@">>>>>>>>>>>>Current Table row = %d, %d, %d", loadedCellArray.count, currentRow, [Table numberOfRowsInSection:0]);


        /*if(loadedCellArray.count > currentRow + 1 && [loadedCellArray objectAtIndex:(currentRow)] != nil)
         {
         NSLog(@"Image updated = %d", ( currentRow));

         cell = (CustomThumbImageTableCell_iphone *) [loadedCellArray objectAtIndex:(currentRow )];

         }
         else
         {*/

        /*if(loadedCellArray.count > currentRow + 1 )// && [loadedCellArray objectAtIndex:(currentRow)] != nil)
         // if( [loadedCellArray objectAtIndex:(currentRow)] != nil)
         {
         //NSLog(@"Image updated = %d", ( currentRow));

         cell = (CustomThumbImageTableCell_iphone *) [loadedCellArray objectAtIndex:([indexPath row]  )];
         if(!isScrollingUp) 
         {
         //scrollCount++;
         [loadedCellArray removeLastObject];
         }
         isScrollingUp = YES;

         }
         else*/
        {

            static NSString *CellIdentifier = @"CustomThumbImageTableCell_iphone";
            static NSString *CellIdentifier1 = @"CustomThumbImageTableCell_iph开发者_StackOverflowone";
            //UITableViewCell *cell;

            if(cell==nil)
            {
                cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
                cell = [[[CustomThumbImageTableCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
            }
            else
            {
                cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier1];
                cell = [[[CustomThumbImageTableCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier1] autorelease];

            }
            cell.selectionStyle = UITableViewCellSelectionStyleNone;

            NSLog(@">>>>>>>>>..... %d, %d, %@", imgViewArray.count, indexPath.row, (((int)imgViewArray.count- 1) < (int)indexPath.row) ? @"YES" : @"NO");
            /*if(((int)imgViewArray.count- 1) < (int)indexPath.row)
            {
                //  NSLog(@">>>>> Creating image >>>>>>>>");
                cell.thumbImageView = [[CustomImageView alloc] initWithFrame:CGRectMake(4, 4, 83, 101)];

                [imgViewArray addObject:cell.thumbImageView];
            }
            else {
                cell.thumbImageView = (CustomImageView *) [imgViewArray objectAtIndex:indexPath.row];
            }*/
            //NSLog(@"img array = %@,%d",imgViewArray,imgViewArray.count);

            cell.thumbImageView =[imgViewArray objectAtIndex:indexPath.row];
            cell.thumbImageView.contentMode = UIViewContentModeScaleAspectFit;
            [cell.contentView addSubview:cell.thumbImageView];

            cell.thumbImageView.index = (int)indexPath.row;

            @try
            {

                {
                    BOOL isFound = NO;
                    do
                    {   
                        @try {
                            NSArray *array1 = [contentString componentsSeparatedByString:@"@@#"];
                            NSArray *array2 = [[array1 objectAtIndex:currentRow ] componentsSeparatedByString:@"##"];           
                            NSString *str = [NSString stringWithFormat:@"%@", [array2 objectAtIndex:0]];
                            str = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

                            UILabel *name = [[UILabel alloc] initWithFrame:CGRectMake(104, 6, 141, 96)];
                            name.textAlignment = UITextAlignmentCenter;
                            name.font = [UIFont fontWithName:@"Arial" size:17.0];
                            name.numberOfLines = 3;
                            name.backgroundColor = [UIColor clearColor];
                            name.textColor = [UIColor whiteColor];
                            cell.catalogName = name;
                            [cell.catalogName setText:[NSString stringWithFormat:@"%@", str]];
                            [cell.contentView addSubview:cell.catalogName];
                            //[name release];

                            name = [[UILabel alloc] initWithFrame:CGRectMake(107, 89, 193, 21)];//107,89,193
                            name.textAlignment = UITextAlignmentCenter;
                            name.font = [UIFont fontWithName:@"Arial" size:13.0];
                            name.textColor = [UIColor whiteColor];
                            name.numberOfLines = 3;
                            name.backgroundColor = [UIColor clearColor];
                            name.alpha = 0.26;
                                cell.pageNo = name;

                                [cell.contentView addSubview:cell.pageNo];
                            //[name release];



                            if((searchId != 2 && (isLineNameSearchEnabled == 0)) || searchInCatalogFlag == 1)
                                //cell  Page No//pageNoLabel
                                //NSLog(@"cell for row.......");
                                [cell.pageNo setText:[NSString stringWithFormat:@"Page No: %@", [array2 objectAtIndex:(array2.count - 2)]]];


                            {

                            }

                            NSLog(@" thumb image = %@",[NSString stringWithFormat:@"%@%@", baseURL,  [array2 objectAtIndex:1]]);

                            //[cell.thumbImageView setImageURL:@"http://www.zoomcatalog.com/sites/default/files/catalogs/27705_Abex2010/images/thumbnails/Thumb-1.jpg"];
                            [cell.thumbImageView setImageURL:[NSString stringWithFormat:@"%@%@", baseURL,  [array2 objectAtIndex:1]]];
                            [NSThread detachNewThreadSelector:@selector(initThread) toTarget:cell.thumbImageView withObject:nil];
                            [cell.thumbImageView setPageNo:((searchId == 2 || (isLineNameSearchEnabled && searchInCatalogFlag == 0)) ? 0 : (int)currentRow)];


                            UIImageView *img = [[UIImageView alloc] initWithFrame:CGRectMake(264, 33, 36, 34)];
                            img.contentMode = UIViewContentModeScaleToFill;
                            [img setImage:cellArrow];
                            [cell.contentView addSubview:img];

                            [img release];

                            [cell.catalogName release];
                            //>>>>      [cell.pageNoLabel release];
                            [cell.thumbImageView release]; 
                            isFound = YES;
                        }
                        @catch (NSException * e) {
                            //skippedItems++;
                            currentRow = [indexPath row] + 1;
                        }

                    }
                    while (!isFound);




                    /*if(isScrollingUp)
                     {
                     //scrollCount++;
                     [loadedCellArray removeLastObject];
                     }
                     isScrollingUp = NO;
                     currentRow =indexPath.row;     
                     // cell = (CustomThumbImageTableCell_iphone *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
                     if (cell == nil)
                     {
                     //cell = (CustomThumbImageTableCell_iphone *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

                     NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomThumbImageTableCell_iphone" owner:self options:nil];
                     //cell = (CustomThumbImageTableCell_iphone *) [loadedCellArray objectAtIndex:(currentRow )];
                     cell = self.cell;
                     self.cell = nil;

                     }  
                     NSLog(@"Image loaded from source= %d,", ( currentRow));
                     //if(loadedCellArray.count > currentRow + 1)
                     // NSLog(@"Image loaded from source cell array ref= %@", [loadedCellArray objectAtIndex:(currentRow)]);

                     /*if(currentRow == ([Table numberOfRowsInSection:0] - 1))
                     {
                     cell.catalogName.text = @"50 More";
                     NSLog(@">>>>>>>>>>>>>>>>>>>>> End cell....");
                     return cell;
                     }
                     /////
                     // if(true)
                     // return cell;
                     @try
                     {

                     {
                     BOOL isFound = NO;
                     do
                     {  
                     @try {
                     NSArray *array1 = [contentString componentsSeparatedByString:@"@@#"];
                     NSArray *array2 = [[array1 objectAtIndex:currentRow] componentsSeparatedByString:@"##"];           
                     NSString *str = [NSString stringWithFormat:@"%@", [array2 objectAtIndex:0]];
                     str = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
                     // NSLog(@"&&&&&&&&&&&&&&&&& %@", str);
                     [cell.catalogName setText:[NSString stringWithFormat:@"%@", str]];
                     if((searchId != 2 && (isLineNameSearchEnabled == 0)) || searchInCatalogFlag == 1)
                     [cell.pageNo setText:[NSString stringWithFormat:@"Page No: %@", [array2 objectAtIndex:(array2.count - 2)]]];

                     // NSLog(@"Background color has been set....%d", i);
                     //NSLog(@")
                     //NSLog(@"Catalog %d = %@", currentRow, [array1 objectAtIndex:currentRow]);
                     // NSLog(@"Image URL = %@", [NSString stringWithFormat:@"%@%@", baseURL,  [array2 objectAtIndex:1]]);

                     [cell.thumbImageView setImageURL:[NSString stringWithFormat:@"%@%@", baseURL,  [array2 objectAtIndex:1]]];
                     //[cell.thumbImageView setContentString:contentString];
                     //if(searchId == 2)
                     // [cell.thumbImageView setContentString:[NSString stringWithFormat:@"%@", [array2 objectAtIndex:(array2.count - (isLineNameSearch ? 2 :  2))]]];

                     [cell.thumbImageView performSelectorOnMainThread:@selector(initThread) withObject:nil waitUntilDone:NO];
                     [cell.thumbImageView setPageNo:(searchId == 2 ? @"0" : [indexPath row])];

                     isFound = YES;
                     }
                     @catch (NSException * e) {
                     //skippedItems++;
                     currentRow = [indexPath row] + 1;
                     }
                     */ 
                    //  }
                    //  while(!isFound);// && currentRow < [Table numberOfRowsInSection:0]);

                    //[imgViewArray addObject:cell.thumbImageView];



                    //  [imgViewArray retain];



                    //[label setTextColor:[UIColor blackColor]];
                    //[label setTextAlignment:UITextAlignmentCenter];
                    /*          UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(7 + ((i % 3) * (96 + 8)) , 9 + ((i / 3) * (140 + 10)), 98, 142)];
                     [label setBackgroundColor:[UIColor grayColor]];
                     [scrollView addSubview:label];

                     [imgViewArray addObject:imgView];
                     [scrollView addSubview:imgView];
                     if(i % 3 == 0)
                     {
                     [scrollView setContentSize:CGSizeMake(scrollView.contentSize.width, scrollView.contentSize.height + (140 + 10))];
                     }*/
                }
                //[imgViewArray retain];
                //  [cellArray retain];
            }


When you have memory management issues, there are a number of things you can do:

  1. Re-read the Cocoa memory management rules and make sure that you're following them.
  2. Run the static analyser. This will often pick up places where you have neglected the memory management rules.
  3. Since it appears that you have already enabled NSZombies, insert a breakpoint for [_NSZombie release]. This should hopefully break on the line that is causing the problem.

Edit:

Based on your code, the following line could be the culprit.

[cell.thumbImageView release]; // NOT GOOD

Similarly in your other code you have:

[cell.thumbImageView release]; // NOT GOOD
[cell.catalogName release]; // NOT GOOD

You set an autoreleased object to the thumbImageView and catalogName property of the cell, but you are still trying to release it. This is not how Cocoa memory management works. You don't own cell.thumbImageView or cell.catalogName, so you should not release them.


This problem occurs when you are trying to access the deallocated object. May be your string get released before you accessing it.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜