views:

240

answers:

1

when you click on the Updatebutton to update the UITableView.

   .h
    NSArray *sortedArray;
    NSMutableArray *animals;

    .m
        -(void)update{
                [self checkAndCreateDatabase];
         [self readAnimalsFromDatabase];
         [self sort];
         [self.tableView reloadData];
        }


        - (void)sort{
         NSSortDescriptor *sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"distance" ascending:YES] autorelease];
         NSMutableArray *sortDescriptors = [NSMutableArray arrayWithObject:sortDescriptor];
         sortedArray = [animals sortedArrayUsingDescriptors:sortDescriptors];

        }

        - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
....
//This works but it uses the animals, unsorted array. 
//If I replace it with this: Animal *myAnimal = (Animal *)[sortedArray objectAtIndex:indexPath.row];, it will give the error1.

         Animal *myAnimal = (Animal *)[animals objectAtIndex:indexPath.row];
         NSString *temp = [NSString stringWithFormat:@"%@ - %@",myAnimal.distance, myAnimal.name];
         cell.textLabel.text = temp; 
         return cell;
        }

error1:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[_NSIndexPathUniqueTreeNode objectAtIndex:]: unrecognized selector sent to instance 0x3d3feb0'

Any help would be great! thank you.

A: 

You probably need to retain your sorted animals array

sortedArray = [[animals sortedArrayUsingDescriptors:sortDescriptors] retain];

The clue is that your error said [_NSIndexPathUniqueTreeNode objectAtIndex:] but you expected sortedArray to be NSArray, not _NSIndexPathUniqueTreeNode. This tells you that the object sortedArray is pointing at has changed, which is usually an indication that it's been freed and the memory used by something else.

Sam

deanWombourne
u r a genius. thank you very much. :) made my day
Alexandergre