UITableView corrupted upon scroll down.

Discussion in 'iOS Programming' started by herbertmunch, Oct 20, 2009.

  1. herbertmunch macrumors newbie

    Oct 20, 2009
    Hello all,
    Im trying to get a UITableView to display items contained within an array.
    This array is contained within a class (HX_ParkingSearch).

    I have a ref to this class that contains the array inside the app delegate class, to enable the views to access it.
    Problem is that I get one page of results displaying correctly inside the tableview
    but when i try and scroll down an exception occurs when trying to access the next item in the array.
    It turns out that when i scroll down and the cellForRowAtIndexPath method fires,
    the items inside the array are invalid and appear to have been released but i dont understand where
    they are being released!

    Does anyone have any ideas because this is really doing my head in now!

    Many thanks,

    // Customize the appearance of table view cells.
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    	static NSString *CellIdentifier = @"Cell";
    	HX_ParkingLocation *location;
    	bookingApp2AppDelegate *del  = (bookingApp2AppDelegate *) [[UIApplication sharedApplication] delegate];   
    	NSMutableArray* array = [del.parkingSearch locations];
    	UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    	location = (HX_ParkingLocation*) [array objectAtIndex: [indexPath row] ];
    	//Causes error when uitableview is scrolled down due to memory being released!
    	[cell setText: location.name];
        return cell;
    #import <Foundation/Foundation.h>
    @interface HX_ParkingLocation : NSObject
    	NSString *name;
    @property(retain,nonatomic) NSString* name;
     Initialises this Location instance by passing in the name and code of the location and the URL of the webapi product endpoint.
     The URL is used to find available products at this location.
    -(id) initWithName: (NSString*) n;
    #import <Foundation/Foundation.h>
    @interface HX_ParkingSearch : NSObject 
    	NSMutableArray* locations;
    @property (retain) NSMutableArray* locations;
    -(BOOL) loadLocations;
    #import "HX_ParkingSearch.h"
    #import "HX_Parking_Location.h"
    @implementation HX_ParkingSearch
    @synthesize locations;
    //Finds the locations
    -(BOOL) loadLocations
    	[locations release];
    	//Create array to hold locations
    	locations = [[NSMutableArray alloc] initWithCapacity:30];
    	//Loop through all returned locations
    	for(int i=0;i<15;i++)
    		//Get location name
    		NSString* n = [NSString stringWithFormat:@"Item #%i",i ];
    		//Create location instance, which retrieves availability and product information and stores the information in location object.
    		HX_ParkingLocation* location = [[HX_ParkingLocation alloc] initWithName:n];
    		//add to array
    	 	[locations addObject:location];
    	return YES;
    #import <UIKit/UIKit.h>
    #import "HX_ParkingSearch.h"
    @interface bookingApp2AppDelegate : NSObject <UIApplicationDelegate> {
        UIWindow *window;
        UINavigationController *navigationController;
    	 HX_ParkingSearch *parkingSearch;
    @property (nonatomic, retain) IBOutlet UIWindow *window;
    @property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
    @property (retain) HX_ParkingSearch *parkingSearch;
    @implementation bookingApp2AppDelegate
    @synthesize window;
    @synthesize navigationController;
    @synthesize parkingSearch;
    - (void)applicationDidFinishLaunching:(UIApplication *)application 
    	//Create new parking search instance by specifying the endpoint urls
    	HX_ParkingSearch* search = [[HX_ParkingSearch alloc] init];
    	[search loadLocations];
    	parkingSearch = search;
    	//NSLog(@"Search Retain count = %i" ,[search retainCount]);
    	[window addSubview:[navigationController view]];
    	//[window addSubview:[navigationController initWithNibName:@"VC_Locations" bundle:[NSBundle mainBundle]]];
    	[window makeKeyAndVisible];
  2. herbertmunch thread starter macrumors newbie

    Oct 20, 2009
    It seems that the problem does not occur if Instead of storing HX_ParkingLocation I store objects of type NSString in the array!

    Any ideas why this might be?


Share This Page